Каков рекомендуемый способ создать предзаполненную двухмерную антенную решетку в Scala? У меня есть следующий код:
val map = for {
x <- (1 to size).toList
} yield for {
y <- (1 to size).toList
} yield (x, y)
Как я делаю массив вместо списка? Замена .toList с .toArray не компилирует. И есть ли более краткий или читаемый способ сделать это, чем вложенный для выражений?
В 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))
Среди других способов вы можете использовать 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, также ....)