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

dsg*_*dsg 3 arrays scala map multidimensional-array

我知道有一种干净的方法可以f:A => B在一个数组上映射一个函数,foo类型Array[A]来获取一个Array[B]via foo.map{f}.

有没有干净的方式映射fbar:Array[Array[A]]得到一个Array[Array[B]]可以保留的阵列结构bar,同时映射所有的A元素类型的元素B

通常,有没有办法映射任意维度的数组元素(即不仅仅是2D而是3D,4D等).

lee*_*777 6

你可以在地图中映射:

bar.map(_.map(f))
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

实际上,我发现无形状具有"对任意嵌套数据结构的通用映射和折叠操作".我没有测试过Array,但看起来它适用于其他数据结构.

everywhere(f)(bam)
Run Code Online (Sandbox Code Playgroud)