# 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에서는 foryield를 활용하여 간결하게 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으로 변환하는 방식입니다. collectPartialFunction을 기반으로 동작하므로, 특정 조건이나 변환 로직이 필요한 경우에 유용합니다.

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