如何循环哈希?

时间:2011-04-04 10:05:29

标签: perl hash perl-data-structures

给出以下变量:

$test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
}

如何在不知道我拥有哪些键的情况下遍历所有作业?

我想填充一个选择框,其结果为标签,键为隐藏值。

3 个答案:

答案 0 :(得分:5)

只需在按键上执行foreach循环:

#!/usr/bin/perl
use strict;
use warnings;

my $test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
};

foreach my $key(keys %$test) {
    print "key=$key : value=$test->{$key}\n";
}

<强>输出:

key=4 : value=G
key=1 : value=A
key=3 : value=C
key=2 : value=B
key=5 : value=K

答案 1 :(得分:4)

您可以使用内置函数each

while (my ($key, $value) = each %$test) {
  print "key: $key, value: $value\n";
}

答案 2 :(得分:3)

您可以使用keys

找出您拥有的密钥
my @keys = keys %$test; # Note that you need to dereference the hash here

或者你可以一次完成整个过程:

print map { "<option value='$_'>$test->{$_}</option>"  } keys %$test;

但你可能想要某种秩序:

print map { "<option value='$_'>$test->{$_}</option>"  } sort keys %$test;

...而且你几乎肯定最好将HTML代移到单独的template system