从Perl中的多维数组中收集子数组

时间:2012-09-12 17:44:40

标签: perl multidimensional-array slice

假设我构建了以下多维数组:

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

3 个答案:

答案 0 :(得分:5)

我想你想要:

my @other_array = map { $_->[1] } @array;

另一种语言可能具有此操作的特殊语法,但它仍然会在幕后执行循环。

答案 1 :(得分:4)

map交朋友:

my @other_array = map $array[$_][1], 0 .. $#array;

Slices section in perldoc perllol有更多例子。

答案 2 :(得分:2)

对于你的例子,这可能是一个过度的解决方案,但假设你正在计划使用巨大的多维数组(矩阵),使用PDL并执行transpose然后切出期望的行。