1

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

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

4

3 回答 3

5

我想你想要:

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

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

于 2012-09-12T17:48:08.900 回答
4

交友map

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

中的切片部分perldoc perllol有更多示例。

于 2012-09-12T17:48:40.893 回答
2

对于您的示例,这可能是一个矫枉过正的解决方案,但假设您打算使用巨大的多维数组(矩阵)来执行此操作,请使用PDL并执行transpose然后切出所需的行。

于 2012-09-12T19:06:46.917 回答