# Python
squares = {x: x*x for x in range(5)}

1. for + yield

val squares = (for (x <- 0 until 5) yield (x, x * x)).toMap

이 코드는 0 until 5에서 각 값을 순회하고 (키, 값) 쌍을 생성한 후 yield로 반환하여 Map을 만들고, toMap을 사용해 Map으로 변환합니다.

따라서, Scala에서는 for와 yield를 활용하여 간결하게 Map을 생성할 수 있습니다.

2. map

val squares = (0 until 5).map(x => x -> (x * x)).toMap

3. foldLeft

Scala에서 foldLeft를 사용하여 Map을 생성하는 방법은 초기 값을 빈 Map으로 설정한 후, 범위나 리스트의 각 요소를 순회하면서 Map에 (키, 값) 쌍을 추가하는 방식입니다. foldLeft는 누적 변수를 사용해 하나씩 값을 축적해 나가므로 이를 통해 Map을 생성할 수 있습니다.

val squares = (0 until 5).foldLeft(Map[Int, Int]()) { (acc, x) =>
  acc + (x -> (x * x))
}

4. collect

Scala의 collect를 활용하여 Map을 생성하는 방법은 패턴 매칭을 사용해 (키, 값) 쌍을 생성하고, 이를 Map으로 변환하는 방식입니다. collect는 PartialFunction을 기반으로 동작하므로, 특정 조건이나 변환 로직이 필요한 경우에 유용합니다.

val squares = (0 until 5).collect {
  case x => x -> (x * x)
}.toMap