压缩两个数组,总是第一个数组的3个元素,然后第二个数组的2个元素

Sor*_*ona 3 functional-programming scala

我已经手动构建了一个方法,该方法需要2个数组,并将它们组合为1个,如下所示:

a0,a1,a2,b0,b1,a3,a4,a5,b2,b3,a6,...
Run Code Online (Sandbox Code Playgroud)

因此,我总是采用第一个数组的3个元素,然后选择第二个数组的2个元素。如我所说,我是手动构建该函数的。

现在,我想我可以在的帮助下将其变成单线zip。问题在于,仅凭zip是不够的,因为zip会构建类似的元组(a0, b0)

我当然可以flatMap这个,但仍然不是我想要的:

val zippedArray: List[Float] = data1.zip(data2).toList.flatMap(t => List(t._1, t._2))
Run Code Online (Sandbox Code Playgroud)

这样,我会得到一个List(a0, b0, a1, b1,...),仍然不是我想要的。(然后我将toArray用于列表...现在更方便地使用List)

我考虑过使用takedrop但是它们返回的是新的数据结构,而不是修改旧的数据结构,因此并不是我真正想要的。

可以想象,我还没有真正从事函数式编程。我确实使用它,并且看到了巨大的好处,但是有些事情与我习惯的有很大不同。

elm*_*elm 5

考虑将array a按3 分组,并将array b按2 分组,即

val a = Array(1,2,3,4,5,6)
val b = Array(11,22,33,44)

val g = (a.grouped(3) zip b.grouped(2)).toArray
Array((Array(1, 2, 3),Array(11, 22)), (Array(4, 5, 6),Array(33, 44)))
Run Code Online (Sandbox Code Playgroud)

然后

g.flatMap { case (x,y) => x ++ y }
Array(1, 2, 3, 11, 22, 4, 5, 6, 33, 44)
Run Code Online (Sandbox Code Playgroud)