scala - 如何在 Scala 中将函数应用于多维数组的每个元组?

标签 scala tuples

我有一个二维数组,我想对数组中的每个值应用一个函数。

这是我正在处理的内容:

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/

相关文章:

f# - 访问 F# 元组中的特定成员

python - 如何获取使用 "if element in list"找到的元素的索引或元素本身

scala - 使用 SBT 创建多个工件

scala - 在本地计算机上运行Spark Streaming时出现“连接被拒绝”错误

Scala Spark : (org. apache.spark.repl.ExecutorClassLoader) 无法在路径上检查 REPL 类服务器上的类组织是否存在

arrays - 快速从元组数组中提取元组的元素

c++ - 使用 std::tuple 从 map 中输出

scala - Akka Streams 是否利用 Akka Actors?

scala - 理解 Scala 使用抽象类型和类

python - 我想将元组值添加到元组,如果该元组[0 :2] is repeated as shown below: