Создать и заполнить двумерный массив в Scala - PullRequest
7 голосов
/ 23 марта 2010

Каков рекомендуемый способ создания предварительно заполненного двумерного массива в Scala?У меня есть следующий код:

val map = for {
    x <- (1 to size).toList
} yield for {
        y <- (1 to size).toList
    } yield (x, y)

Как мне сделать массив вместо списка?Замена .toList на .toArray не компилируется.И есть ли более краткий или читабельный способ сделать это, чем вложенные выражения?

Ответы [ 2 ]

9 голосов
/ 23 марта 2010

В Scala 2.7 используйте Array.range:

for {
  x <- Array.range(1, 3)
} yield for {
  y <- Array.range(1, 3)
} yield (x, y)

В Scala 2.8 используйте Array.tabulate:

Array.tabulate(3,3)((x, y) => (x, y))
2 голосов
/ 23 марта 2010

Среди других способов вы можете использовать Array.range и map:

scala> Array.range(0,3).map(i => Array.range(0,3).map(j => (i,j)))
res0: Array[Array[(Int, Int)]] = Array(Array((0,0), (0,1), (0,2)), Array((1,0), (1,1), (1,2)), Array((2,0), (2,1), (2,2)))

Или вы можете использовать Array.fromFunction:

scala> Array.fromFunction((i,j) => (i,j))(3,3)                    
res1: Array[Array[(Int, Int)]] = Array(Array((0,0), (0,1), (0,2)), Array((1,0), (1,1), (1,2)), Array((2,0), (2,1), (2,2)))

Scala 2.8 дает вам еще больше возможностей - посмотрите на объект Array. (На самом деле, это хороший совет для 2.7, также ....)

...