在 Scala 中创建预填充二维数组的推荐方法是什么?我有以下代码:
val map = for {
x <- (1 to size).toList
} yield for {
y <- (1 to size).toList
} yield (x, y)
如何制作数组而不是列表?用 .toArray 替换 .toList 不会编译。有没有比嵌套的 for 表达式更简洁或可读的方法呢?
在 Scala 中创建预填充二维数组的推荐方法是什么?我有以下代码:
val map = for {
x <- (1 to size).toList
} yield for {
y <- (1 to size).toList
} yield (x, y)
如何制作数组而不是列表?用 .toArray 替换 .toList 不会编译。有没有比嵌套的 for 表达式更简洁或可读的方法呢?
在 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))
除其他方式外,您可以使用 useArray.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 的好建议......)