Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays scala中的多维数组zip数组_Arrays_Scala_Zip - Fatal编程技术网

Arrays scala中的多维数组zip数组

Arrays scala中的多维数组zip数组,arrays,scala,zip,Arrays,Scala,Zip,我是scala的新手 我有两个数组,如: val one = Array(1, 2, 3, 4) val two = Array(4, 5, 6, 7) var three = one zip two map{case(a, b) => a * b} 没关系 但我现在有一个多维数组和一个一维数组,如下所示: val mulOne = Array(Array(1, 2, 3, 4),Array(5, 6, 7, 8),Array(9, 10, 11, 12)) val one_arr =

我是scala的新手

我有两个数组,如:

val one = Array(1, 2, 3, 4)
val two = Array(4, 5, 6, 7)
var three = one zip two map{case(a, b) => a * b}
没关系

但我现在有一个多维数组和一个一维数组,如下所示:

val mulOne = Array(Array(1, 2, 3, 4),Array(5, 6, 7, 8),Array(9, 10, 11, 12))
val one_arr = Array(1, 2, 3, 4)
我想将它们相乘,如何在scala中实现

提前谢谢。

试试这个

mulOne.map{x => (x, one_arr)}.map { case(one, two) => one zip two map{case(a, b) => a * b} }
mulOne.map{x=>(x,one_arr)}
=>对于
mulOne
中的每个数组,创建一个包含one_arr内容的元组

.map{case(one,two)=>one-zip-two-map{case(a,b)=>a*b}}
基本上是您在第一个示例中对第一步中创建的每个元组执行的操作

您可以使用:

val tmpArr = mulOne.map(_ zip one_arr).map(_.map{case(a,b) => a*b})
tmpArr.map(_.reduce(_ + _))
这将为您提供
数组(数组(1*1,2*2,3*3,4*4)、数组(5*1,6*2,7*3,8*4)、数组(9*1,10*2,11*3,12*4))

这里的
mulOne.map(zip one_arr)
mulOne
的每个内部数组与
one arr
的相应元素映射,以创建如下对:
数组(数组((1,1)、(2,2)、(3,3)、(4,4)),…)
(注意:我使用了占位符语法)。在下一步中,
.map(u.map{case(a,b)=>a*b})
将成对的每个元素相乘,得到 像这样的输出:
Array(Array(1,4,9,16),…)

然后你可以使用:

val tmpArr = mulOne.map(_ zip one_arr).map(_.map{case(a,b) => a*b})
tmpArr.map(_.reduce(_ + _))

要获得所有内部
数组的总和
s以获得
数组(30,70,110)

,请使用这样的方法进行理解

val prods = 
  for { xs <- mulOne
       zx = one_arr zip xs
       (a,b) <- zx
      } yield a*b

提供最终结果。

您希望输出结果是什么?1*1+2*2+3*3+4*4 5*1+6*2+7*3+8*4……这对我也有帮助。谢谢