# Python
squares = {x: x*x for x in range(5)}
val squares = (for (x <- 0 until 5) yield (x, x * x)).toMap
이 코드는 0 until 5
에서 각 값을 순회하고 (키, 값)
쌍을 생성한 후 yield
로 반환하여 Map
을 만들고, toMap
을 사용해 Map
으로 변환합니다.
따라서, Scala에서는 for
와 yield
를 활용하여 간결하게 Map
을 생성할 수 있습니다.
val squares = (0 until 5).map(x => x -> (x * x)).toMap
0 until 5
는 Range(0, 1, 2, 3, 4)
를 생성합니다.map
함수는 각 요소에 대해 (키, 값)
쌍을 생성합니다. 여기서 x -> (x * x)
는 튜플 (x, x * x)
를 생성하는 구문입니다.toMap
을 호출하여 이 튜플들의 리스트를 Map
으로 변환합니다.Scala에서 foldLeft
를 사용하여 Map
을 생성하는 방법은 초기 값을 빈 Map
으로 설정한 후, 범위나 리스트의 각 요소를 순회하면서 Map
에 (키, 값)
쌍을 추가하는 방식입니다. foldLeft
는 누적 변수를 사용해 하나씩 값을 축적해 나가므로 이를 통해 Map
을 생성할 수 있습니다.
val squares = (0 until 5).foldLeft(Map[Int, Int]()) { (acc, x) =>
acc + (x -> (x * x))
}
0 until 5
는 Range(0, 1, 2, 3, 4)
를 생성합니다.foldLeft
는 초기 값으로 빈 Map[Int, Int]()
을 설정합니다.(acc, x)
는 현재까지의 누적된 Map
(acc
)과 범위의 현재 값(x
)을 인자로 받습니다.acc + (x -> (x * x))
는 기존의 Map
에 새로운 (x, x * x)
항목을 추가한 새로운 Map
을 반환합니다.Scala의 collect
를 활용하여 Map
을 생성하는 방법은 패턴 매칭을 사용해 (키, 값)
쌍을 생성하고, 이를 Map
으로 변환하는 방식입니다. collect
는 PartialFunction
을 기반으로 동작하므로, 특정 조건이나 변환 로직이 필요한 경우에 유용합니다.
val squares = (0 until 5).collect {
case x => x -> (x * x)
}.toMap