【问题标题】:How can I extract an array from a two-dimensional array in Perl?如何从 Perl 中的二维数组中提取数组?
【发布时间】:2023-03-16 23:03:01
【问题描述】:

我又一次忘记了如何让$_ 在二维数组的循环中表示一个数组。

foreach(@TWO_DIM_ARRAY){
   my @ARRAY = $_;
}

这就是意图,但这不起作用。这样做的正确方法是什么?

【问题讨论】:

  • 你能显示你开始的数据和你想要结束的数据吗,即使是伪代码?

标签: arrays perl multidimensional-array


【解决方案1】:

my @ARRAY = @$_; 行(而不是 = $_;)是您要查找的内容,但除非您明确想要复制引用的数组,否则我会直接使用 @$_。

好吧,实际上我根本不会使用$_,特别是因为您可能想要遍历@$_,然后您在内循环中也使用隐式$_,然后您可以搞不清楚哪个$_ 是哪个,或者这是否合法。这可能就是您最初复制到@ARRAY 的原因。

不管怎样,我会这样做:

for my $array_ref (@TWO_DIM_ARRAY) {

    # You can iterate through the array:
    for my $element (@$array_ref) {
        # do whatever to $element
    }

    # Or you can access the array directly using arrow notation:
    $array_ref->[0] = 1;
}

【讨论】:

  • +1 for my $var 语法。似乎很多人对此并不在意,尽管它大大提高了可读性。
  • 仍然,为什么这不起作用:foreach(@TWO_DIM_ARRAY){ print join ',',@{$_}; } 毕竟 $_ 是一个数组引用,@{$_} 应该是一个数组。
  • @Michael Goldshteyn:这也行。 @{$_}@$_ 相同。例如,我刚试过这个:my @A=([1,2,3],[4,5,6],[7,8,9]); foreach(@A) { print join(",", @{$_}), "\n"; }
【解决方案2】:
for (@TWO_DIM_ARRAY) {
    my @arr = @$_;
}

【讨论】:

    【解决方案3】:

    $_ 将是数组references(不是arrays),因此您需要将其取消引用为:

    my @ARRAY = @$_;
    

    【讨论】:

      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2016-06-11
      • 2018-12-22
      相关资源
      最近更新 更多