考慮以下變量:如何循環散列?
$test = {
'1' => 'A',
'2' => 'B',
'3' => 'C',
'4' => 'G',
'5' => 'K',
}
如何遍歷所有分配不知道我有鑰匙?
我想填充一個選擇框,結果作爲標籤和鍵作爲隱藏值。
考慮以下變量:如何循環散列?
$test = {
'1' => 'A',
'2' => 'B',
'3' => 'C',
'4' => 'G',
'5' => 'K',
}
如何遍歷所有分配不知道我有鑰匙?
我想填充一個選擇框,結果作爲標籤和鍵作爲隱藏值。
只是做一個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
你可以找出你有什麼鍵與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。
+1這幾乎是我正在尋找的 – Thariama 2011-04-04 10:20:42
您可以使用內置的功能each
:
while (my ($key, $value) = each %$test) {
print "key: $key, value: $value\n";
}
這是我最喜歡的一種方法來迭代散列。 'foreach my ...'構造似乎更廣泛地使用,但我喜歡'each'隱式地使用鍵/值對進行處理。 – Marcus 2011-04-05 14:46:33
+1這正是我一直在尋找 – Thariama 2011-04-04 10:21:35
注:你可能還想在'keys'函數之前使用'sort'來獲取你的數據,以便以某種有用/可預測的順序獲得你的數據。 – 2011-04-05 03:03:36