Scala:迭代二维数组做操作

Scala: iteration 2d array to do operation

这里是新手。

val arr_one = Array(Array(1, 2), Array(3, 4), Array(5, 6),Array(x, y)..and so on)
val arr_two = Array(Array(2,3), Array(4, 5), Array(6, 7))
var tempArr = ArrayBuffer[Double]()

我想乘 arr_one 和 arr_two。例如

Iteration1 :Array(1*2+2*3, 1*4 +2*5, 1*6+2*7 ) 分配给 tempArr

迭代 2 :Array(3*2+4*3, 3*4 +4*5, 3*6+4*7) 分配给 tempArr

迭代 3 :Array(5*2+6*3, 5*4 +6*5, 5*6+6*7) 分配给 tempArr

我知道如果

val x = Array(1, 2) ; val y = Array(Array(2,3), Array(4, 5), Array(6, 7))

我可以用y map {x zip _ map{case(a, b) => a * b} sum}

但是如果 x 喜欢 arr_one 形式,我不知道如何使用 for loop or something else 来做到这一点。

我真的有想法了。

我如何在 scala 中执行此操作?

非常感谢。

我相信这可以满足您的需求,没有任何可变状态和 "iterations" - 它使用“for-comprehension”语法,这是一种非强制性的循环 - 换句话说,而不是在每次迭代中改变状态,它returns一个值,它是每个"iteration"的结果序列:

val result: Array[Array[Int]] = for (arr1 <- arr_one) yield {
  for (arr2 <- arr_two) yield multArrays(arr1, arr2)
}

假设 multArrays 具有以下签名:

def multArrays(arr1: Array[Int], arr2: Array[Int]): Int

计算每个单元格的值。一个简单的实现(假设数组的大小为 2)是:

def multArrays(arr1: Array[Int], arr2: Array[Int]): Int = {
  arr1(0) * arr2(0) + arr1(1) * arr2(1)
}

当然这可以推广到任何大小的数组。

可能这就是您所需要的:

val tmp = arr_one map ((arr1) => {arr_two map (arr2 => (arr1 zip arr2) map {case(a, b) => a * b} reduce (_ + _))} )

要获得 ArrayBuffer 只需使用 :

tmpArr = tmp.toBuffer