在Scala中创建并填充二维数组

时间:2010-03-22 22:31:37

标签: arrays scala scala-collections

在Scala中创建预先填充的二维数组的推荐方法是什么?我有以下代码:

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

如何制作数组而不是列表?用.toArray替换.toList不会编译。还有比嵌套表达式更简洁或可读的方法吗?

2 个答案:

答案 0 :(得分:9)

在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))

答案 1 :(得分:2)

除其他方式外,您还可以使用Array.rangemap

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的好建议也是......)