http://www.scala-lang.org/api/current/#scala.collection.Map
array 할때 느끼긴 했지만, map에서도 scala가 java보다 메소드가 훨씬 많다.
예를들어 별도로 array들의 sum을 구하기위해 for문을 돌릴 필요가 없다.
즉, 코드 사용량이 줄어든다. 에러날 건덕지가 줄어든다.
뭐 이런 유익한 장점들이 map에서도 보인다.
1. map 선언
map 선언구문이다.
'->' 이란 연산자는 쌍을 만드는 역할을 한다. (java에서 처럼 ',' 을 사용해도 가능)
var 으로 선언했지만 기본적으로 immutable 한 성격을 가지고 있다. (변경불가)
물론 mutable하게 선언하면 mutalbe하게 사용할 수 있으니 걱정은 안해도됨.
2. 원소 접근
array처럼 (key) 으로 가능하고, java처럼 .get(key) 형태로도 접근이 가능하다.
그런데 둘의 용도는 조금 다를 수 있다.
get 메소드를 사용할 경우 'Option' 이라는 object가 등장하는데,
이놈의 뜻은 값이 있을수도 있고, 없을 수도 있다. 없다고 해서 예외를 뱉진 않겠다.
뭐 이런거라고 한다. 꽤나 유용할듯.
val bobs
3. 값 갱신
key/value를 갱신하는 방법은 다음과 같다.
4. 반복
map에서 for문 사용이 가능하다.
map을 for문을 돌려서 사용할바에는 arraylist를 쓰는게 맞지 않나 싶기도 헌데
뭐 일단 된다니까 알아보자.
짠. 겁나쉽다.
ex. test.txt 파일을 읽어서 단어별로 반복횟수를 출력하라.
여기서 핵심은
이건 좀 자주쓸듯.
array 할때 느끼긴 했지만, map에서도 scala가 java보다 메소드가 훨씬 많다.
예를들어 별도로 array들의 sum을 구하기위해 for문을 돌릴 필요가 없다.
즉, 코드 사용량이 줄어든다. 에러날 건덕지가 줄어든다.
뭐 이런 유익한 장점들이 map에서도 보인다.
1. map 선언
scala> var scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8) scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Bob -> 3, Cindy -> 8)
map 선언구문이다.
'->' 이란 연산자는 쌍을 만드는 역할을 한다. (java에서 처럼 ',' 을 사용해도 가능)
var 으로 선언했지만 기본적으로 immutable 한 성격을 가지고 있다. (변경불가)
물론 mutable하게 선언하면 mutalbe하게 사용할 수 있으니 걱정은 안해도됨.
2. 원소 접근
array처럼 (key) 으로 가능하고, java처럼 .get(key) 형태로도 접근이 가능하다.
그런데 둘의 용도는 조금 다를 수 있다.
scala> scores("Alice") res6: Int = 10 scala> scores.get("basdf") res7: Option[Int] = None
get 메소드를 사용할 경우 'Option' 이라는 object가 등장하는데,
이놈의 뜻은 값이 있을수도 있고, 없을 수도 있다. 없다고 해서 예외를 뱉진 않겠다.
뭐 이런거라고 한다. 꽤나 유용할듯.
val bobs
3. 값 갱신
key/value를 갱신하는 방법은 다음과 같다.
scala> scores2 += ("Fred" -> 6) res16: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Fred -> 6, Alice -> 4, Cindy -> 8) scala> scores2 -= "Alice" res17: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Fred -> 6, Cindy -> 8)
4. 반복
map에서 for문 사용이 가능하다.
map을 for문을 돌려서 사용할바에는 arraylist를 쓰는게 맞지 않나 싶기도 헌데
뭐 일단 된다니까 알아보자.
scala> for (v <- scores2.values) println(v) 3 6 8
짠. 겁나쉽다.
ex. test.txt 파일을 읽어서 단어별로 반복횟수를 출력하라.
val In = new java.util.Scanner(new java.io.File("test.txt")) val Words = new scala.collection.mutable.HashMap[String, Int] while (In.hasNext()) { val word = In.next() Words(word) = Words.getOrElse(word, 0) + 1 }
여기서 핵심은
Words(word) = Words.getOrElse(word, 0) + 1Words라는 map이 word라는 key값을 가지고 있으면 값을 호출하고 아니면 0을 호출하라.
이건 좀 자주쓸듯.
댓글
댓글 쓰기