Perl 数组哈希

3
我正在尝试访问哈希表中的数组元素。
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')?
感谢您的帮助!

3个回答

5
while (my ($k, $v) = each %$vsnhash) {
    print "$k: @$v\n";
}

哇,我不知道这是怎么工作的,但学习新东西很酷 :) - FailedDev
2
@FailedDev:实际上很简单。each类似于keys,但同时给出键和值。@$v@{$v}的简写形式,可以解引用数组引用。 - musiKk
@musiKk 谢谢。我从来没有用过这个快捷键 :) - FailedDev

1
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}}){ - Eric

1
$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} 则是数组本身。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接