【问题标题】:Collecting subarrays from multidimensional arrays in Perl从 Perl 中的多维数组中收集子数组
【发布时间】:2023-03-12 01:44:01
【问题描述】:

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

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

【问题讨论】:

  • 顺便说一句,循环中的 [1..$#other_array] 位比需要的要冗长一些。你可以放弃它,只使用[ @other_array ],这意味着同样的事情。
  • @zostay :不完全是。切片中省略了第一个元素(索引 0)

标签: perl multidimensional-array slice


【解决方案1】:

我想你想要:

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

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

【讨论】:

  • 我不喜欢删除块语法。我更喜欢保留{}。不过,这主要是个人喜好。
  • 我个人的偏好是,看起来越简单、更像普通代码的东西越好。但正如你所说,这纯粹是装饰性的。
【解决方案2】:

加好友map:

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

Slices section in perldoc perllol 有更多示例。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多