Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在scala中多维数组上映射函数_Arrays_Scala_Map_Multidimensional Array - Fatal编程技术网

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--太棒了,让我知道它是如何工作的。