我有一个二维数组,我想对数组中的每个值应用一个函数。
这是我正在处理的内容:
scala> val array = Array.tabulate(2,2)((x,y) => (0,0))
array: Array[Array[(Int, Int)]] = Array(Array((0,0), (0,0)), Array((0,0), (0,0)))
我使用 foreach 来提取元组:
scala> array.foreach(i => i.foreach(j => println(i)))
[Lscala.Tuple2;@11d559a
[Lscala.Tuple2;@11d559a
[Lscala.Tuple2;@df11d5
[Lscala.Tuple2;@df11d5
让我们做一个简单的函数:
//Takes two ints and return a Tuple2. Not sure this is the best approach.
scala> def foo(i: Int, j: Int):Tuple2[Int,Int] = (i+1,j+2)
foo: (i: Int,j: Int)(Int, Int)
这会运行,但需要应用于数组(如果可变)或返回新数组。
scala> array.foreach(i => i.foreach(j => foo(j._1, j._2)))
应该不会太糟糕。我认为我缺少一些基础知识......
最佳答案
(更新:删除了不正确的 for 理解代码 - 它返回了一个一维数组)
def foo(t: (Int, Int)): (Int, Int) = (t._1 + 1, t._2 + 1)
array.map{_.map{foo}}
应用于可变数组
val array = ArrayBuffer.tabulate(2,2)((x,y) => (0,0))
for (sub <- array;
(cell, i) <- sub.zipWithIndex)
sub(i) = foo(cell._1, cell._2)
关于scala - 如何在 Scala 中将函数应用于多维数组的每个元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3912528/