Arrays 在scala中多维数组上映射函数
我知道有一种干净的方法可以将函数映射到数组上,Arrays 在scala中多维数组上映射函数,arrays,scala,map,multidimensional-array,Arrays,Scala,Map,Multidimensional Array,我知道有一种干净的方法可以将函数映射到数组上,array[a]类型的foo通过foo.map{f}得到一个array[B] 是否有一种干净的方法将f映射到bar:Array[Array[a]]上,以获得一个Array[Array[B],在将所有a元素映射到B类型的元素时保留bar的数组结构 一般来说,是否有一种方法可以映射任意尺寸数组的元素(即,不仅二维,还包括三维、4D等)。您可以在映射中映射: bar.map(_.map(f)) 我怀疑是否有一种类型安全的方法来映射任意维度的数组,因为不同
array[a]
类型的foo
通过foo.map{f}
得到一个array[B]
是否有一种干净的方法将f
映射到bar:Array[Array[a]]
上,以获得一个Array[Array[B]
,在将所有a
元素映射到B
类型的元素时保留bar
的数组结构
一般来说,是否有一种方法可以映射任意尺寸数组的元素(即,不仅二维,还包括三维、4D等)。您可以在映射中映射:
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()
实际上,我发现它具有“任意嵌套数据结构上的通用映射和折叠操作”。我还没有测试过数组
,但它似乎可以与其他数据结构一起使用
everywhere(f)(bam)
这个shapeless项目看起来很酷,但在我的项目中安装shapeless只是为了这个小用例似乎有些过分。对无形状
无处不在(f)(bam)
的工作原理有何见解?比如,您需要什么样的隐式功能?需要指出的一点是,我希望使用shapeless来实现这一功能会导致编译时间的减少,编译时间会随着深度的增加而增加;因此,我不会在您的代码中使用太多。我还质疑数据结构的总体意义(从可读性/维护的角度),除非您正在进行一些科学编程。在这种情况下,您很可能不想在数组
上使用映射
(假设A
是基本的)而产生运行时装箱开销。@dsg我同意shapeless在这里有些过分,但您可以轻松创建自己的一组方法来映射不同维度的数组,例如def map2[A:Manifest,B:Manifest](A:Array[Array[A]])(f:A=>B)=一个映射(uu.map f)
(Manifest是一个特定于数组的上下文绑定。)您不能重载类型参数,但可以创建使用不同维度数组的map3
、map4
等。此外,map3
的主体可以是一个映射(map2()(f)),以此类推以获得更高的dimensions@dsg同意过度杀戮的部分。但我仍然对它感到惊讶。不确定您需要哪种导入;您必须检查源代码。有关其工作原理的更多详细信息,请查看。这促使我编写自己的多维数组类型。@dave--太棒了,让我知道它是如何工作的。