在scala中通过多维数组映射函数

时间:2012-04-06 21:41:35

标签: arrays scala map multidimensional-array

我知道有一种干净的方法可以将函数f:A => B映射到foo类型的Array[A]数组,以通过Array[B]获得foo.map{f}

是否有一种干净的方法可以将f映射到bar:Array[Array[A]]以获得Array[Array[B]],以便在映射所有bar时保留A的数组结构元素到B类型的元素?

一般来说,有没有办法映射任意维度的数组元素(即不只是2D而是3D,4D等)。

1 个答案:

答案 0 :(得分:6)

您可以在地图中进行映射:

bar.map(_.map(f))

我怀疑有一种类型安全的方法可以映射任意维度的数组,因为不同维度的数组的类型不同。但它足以简单地保持嵌套映射调用:

scala> val bam = new Array[Array[Array[Array[Array[A]]]]](0)
bam: Array[Array[Array[Array[Array[A]]]]] = Array()

scala> bam.map(_.map(_.map(_.map(_.map(f)))))
res1: Array[Array[Array[Array[Array[B]]]]] = Array()

实际上,我发现shapeless具有“对任意嵌套数据结构的通用映射和折叠操作”。我没有使用Array进行测试,但看起来它适用于其他数据结构。

everywhere(f)(bam)