假设我构建了以下多维数组:
my @array; # don't need the empty list
my @other_array = (0 ... 10);
foreach my $i ( 0 .. 10 ) {
$array[$i] = [ @other_array[1..$#other_array] ];
}
我想将这个多维数组的“列”收集到一个单独的数组中,
例如,如果我想收集第一列中的项目,我想要像
这样的内容my @other_array = ();
@other_array = $array[:][1]; # This does NOT work in Perl
有没有办法在没有循环的情况下在Perl中执行此操作?
最终我要做的是获取多维数组每列的max
数组。
PS:这个问题的灵感来自另一个问题:Building and printing a multidimensional list in Perl without looping。
答案 0 :(得分:5)
我想你想要:
my @other_array = map { $_->[1] } @array;
另一种语言可能具有此操作的特殊语法,但它仍然会在幕后执行循环。
答案 1 :(得分:4)
答案 2 :(得分:2)
对于你的例子,这可能是一个过度的解决方案,但假设你正在计划使用巨大的多维数组(矩阵),使用PDL
并执行transpose
然后切出期望的行。