【问题标题】:perl hash of arraysperl 数组哈希
【发布时间】:2011-10-13 00:35:02
【问题描述】:

我正在尝试访问作为散列一部分的数组的元素。

for my $idx ( 0 .. $#vss ) {
    push (@{$vsnhash->{$vss[$idx]}}, $vsports[$idx]);
}
print Dumper(\%$vsnhash);

($VAR1 = {
      'name2' => [
                   '8001',
                   '8002'
                 ],
      'name1' => [
                   '8000'
                 ]
    };

我能够通过 foreach 循环访问键:

foreach my $key ( keys %$vsnhash ) {
print "$key\n";
}

如何访问散列中的端口号数组(“8001”、“8002”)?
感谢您的帮助!

【问题讨论】:

    标签: arrays perl hash


    【解决方案1】:
    while (my ($k, $v) = each %$vsnhash) {
        print "$k: @$v\n";
    }
    

    【讨论】:

    • 哇。我不知道这是如何工作的,但学习新东西很酷:)
    • @FailedDev:实际上相当简单。 each 类似于 keys,但同时为您提供键和值。 @$v@{$v} 的缩写并取消引用数组引用。
    • @musiKk 谢谢。我从来没有使用过这个快捷方式:)
    • 感谢您的建议!
    【解决方案2】:
    foreach my $key ( keys %$vsnhash ) {
       print "$key\n";
       foreach my $port (@{$vsnhash->{key}}){
          print "Port $port\n";
       }
    }
    

    【讨论】:

    • 基本正确,但您有一些语法错误。应该是:foreach my $port (@{$vsnhash->{$key}}){ 而不是 foreach my $port (@{$vsnhash{key}}){
    【解决方案3】:
    $vsnhash{name2}->[0];   #8001
    $vsnhash{name2}->[1];   #8002
    $vsnhash{name1}->[0];   #8000
    

    代码方面:

    foreach my $key (sort keys %vsnhash) {
       foreach my $index (0..$#{$key}) {
          print "\$vsnhash{$key}->[$index] = " . $vsnhash{$key}->[$index] . "\n";
       }
    }
    

    $#{$key} 表示数组 @{$key} 中的最后一个条目。请记住,$key 是对数组的引用,而 @{$key} 是数组本身。

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2014-05-12
      • 1970-01-01
      • 2020-07-19
      • 2011-07-02
      • 2012-08-22
      • 2012-06-12
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多