展平多维数组的最短方法是什么?
这是我的意思的一些示例:
@b
是否有可能递归地展平数组Reviews Size Installs Type Price Content Rating
0 159 19M 10,000+ paid $9.99 Everyone
1 967 14M 500,000+ paid $0.99 Everyone
2 87510 8.7M 5,000,000+ paid $1.9 Everyone
3 215644 25M 50,000,000+ paid $7.50 Teen
4 967 2.8M 100,000+ Free 0 Everyone
之类的数组而无需编写子递归地递归于其中或不知道其维数的子集?
我之所以这样问,是因为我相信编译器(无论现在还是将来的实现)都比子类能够优化更多基于操作员的解决方案。
答案 0 :(得分:7)
不确定是否有更紧凑的方法,但是
say do gather @b.deepmap(*.take);
应该这样做。
如果您不希望展平结果的顺序,
say do gather @b>>.take;
也可能是一个选择,尽管我(觉得)使用超级运算符产生副作用对我来说是“错误的” ...
在对raiph建议的HyperWhats切片进行适当处理之前,您可以通过以下方式添加自己的糖@b[**]
来覆盖此特定用例
multi sub postcircumfix:<[ ]>(\SELF, HyperWhatever:D $, *% where !*) {
gather SELF.deepmap(*.take);
}
答案 1 :(得分:0)
say @a>>.List.flat
应该可以解决问题,但是我注意到Range将破坏递归:
my @a = [[1,2],[3,4],5,[6,7],[8,9,0],[[1,[2,3,4,[ 23,56,^7]],5,6,]],7,8,9,0];
say @a>>.List.flat; #prints (1 2 3 4 5 6 7 8 9 0 1 2 3 4 [23 56 ^7] 5 6 7 8 9 0)
我不知道这是否是错误。