scala-汇总图';s值(按位置)

scala-汇总图';s值(按位置),scala,Scala,我有一张这样的地图 var kk:scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5)) 我需要的是按位置对值数组求和,比如numpy数组加法,结果应该是这样的数组(1+2+4,3+8+5)你需要在地图上迭代以获得地图值的第一个和第二个元素的单独列表。然后应用折叠功能 scala> val data = Map(2 -

我有一张这样的地图

var kk:scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))

我需要的是按位置对值数组求和,比如numpy数组加法,结果应该是这样的数组(1+2+4,3+8+5)

你需要在地图上迭代以获得地图值的第一个和第二个元素的单独列表。然后应用
折叠功能

scala> val data = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
data: scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))

scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2))
res11: (Int, Int) = (7,16)
如果希望结果显式为上述结果的
数组
do
.productIterator.toArray

scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2)).productIterator.toArray
res13: Array[Any] = Array(7, 16)

您需要在地图上迭代
,以获得地图值的第一个和第二个元素的单独列表。然后应用
折叠功能

scala> val data = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))
data: scala.collection.mutable.Map[Int,Array[Int]] = Map(2 -> Array(1, 3), 1 -> Array(2, 8), 3 -> Array(4, 5))

scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2))
res11: (Int, Int) = (7,16)
如果希望结果显式为上述结果的
数组
do
.productIterator.toArray

scala> data.map(kv => kv._2.head -> kv._2.last).foldLeft(0, 0)((a, b) => (a._1 + b._1) -> (a._2 + b._2)).productIterator.toArray
res13: Array[Any] = Array(7, 16)

或者使用
.values
获得数组的
列表,使用
.transpose
在每个“列”上应用
.map
,只需稍微短一点即可:

如果您想获得
数组,请添加
.toArray

scala> data.values.transpose.map(_.sum).toArray
res5: Array[Int] = Array(7, 16)

或者使用
.values
获得数组的
列表,使用
.transpose
在每个“列”上应用
.map
,只需稍微短一点即可:

如果您想获得
数组,请添加
.toArray

scala> data.values.transpose.map(_.sum).toArray
res5: Array[Int] = Array(7, 16)