我知道有一种干净的方法可以将函数 f:A => B
映射到数组 foo
类型 Array[A]
通过 foo.map{f}
得到一个 Array[B]
。
有没有一种干净的方法可以将 f
映射到 bar:Array[Array[A]]
上以获得 Array[Array[B]]
保留 bar
的数组结构,同时将所有 A
元素映射到 B
类型的元素?
一般来说,有没有一种方法可以映射任意维度的数组元素(即不仅是 2D,还包括 3D、4D 等)。
最佳答案
您可以在 map 中进行映射:
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)
关于arrays - 在 Scala 中将函数映射到多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049581/