【问题标题】:Printing values of an array from an array of array references从数组引用数组中打印数组的值
【发布时间】:2014-08-07 15:17:14
【问题描述】:

如何打印数组的值。我尝试了几种方法,但无法从数组中获取所需的值:

@数组; Dumper 输出如下:

$VAR1 = [
          'a',
          'b',
          'c'
        ];
$VAR1 = [
          'd',
          'e',
          'f'
        ];
$VAR1 = [
          'g',
          'h',
          'i'
        ];
$VAR1 = [
          'j',
          'k',
          'l'
        ];



 for my $value (@array) {
  my $ip = $value->[0];
  DEBUG("DEBUG '$ip\n'");
                                  }

我得到如下输出,这意味着foreach 实例我只得到第一个值。

    a
    d
    g
    j

我尝试了几种方法:

第一个选项:

my $size = @array;
for ($n=0; $n < $size; $n++) {
  my $value=$array[$n];
  DEBUG( "DEBUG: Element is as $value" );
}

第二个选项:

 for my $value (@array) {
  my $ip = $value->[$_];
  DEBUG("DEBUG Element is '$ip\n'");
 }

最好的方法是什么?

【问题讨论】:

  • my $ip = join "", @$value;
  • 非常感谢!!!你是天才!!!
  • 您获得每个数组的第一个值,因为my $ip = $value-&gt;[0]; 取消引用每个数组的第一个[0] 索引位置的值。您想取消引用(并循环)“外部”数组(在本例中为 @array)中的每个匿名数组。您的“第一个选项”更接近(您正在尝试循环),但您正在循环外部数组的“$size”而不是每个内部匿名数组。您的第二个选择是犯同样错误的更短的方法:-) 这是一个常见错误:循环和取消引用是不同的 - 但它们经常同时发生!
  • @G.Cito 非常感谢您的解释。
  • 如果您查看@mpapec 提供的解决方案,它基本上告诉编译器循环变量$value 是一个数组(由该标量引用),这就是为什么印记看起来像:@$。如果您在代码中使用Perl::Critic--cruel 选项,您会发现@{ $value } 是首选( Perl 最佳实践)语法。 :-)

标签: perl


【解决方案1】:

很明显,您有数组列表。您只在第一个示例中循环顶部列表并打印第一个(第 0 个)值。除非有任何自动转储器,否则您需要遍历这两个级别。

for my $value (@array) {
    for my $ip (@$value) {
        DEBUG("DEBUG '$ip\n'");
    }
}

【讨论】:

    【解决方案2】:

    您想在此处dereference,因此您需要执行以下操作:

    my @array_of_arrays = ([qw/a b c/], [qw/d e f/ ], [qw/i j k/])
    for my $anon_array (@array_of_arrays) { say for @{$anon_array} }
    

    或者使用你的变量名:

    use strict;
    use warnings;
    
    my @array = ([qw/a b c/], [qw/d e f/], [qw/i j k/]);
    
    for my $ip (@array) {
       print join "", @{$ip} , "\n";  # or "say"      
    }
    

    由于涉及匿名数组,我专注于取消引用(使用 PPB 样式!)而不是嵌套循环,但 print for 确实是一个变相的循环。

    干杯。

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2016-06-04
      • 2020-11-25
      • 1970-01-01
      • 2018-03-11
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多