Perl – 遍歷二維Hash
阿新 • • 發佈:2019-02-13
你都二維了用一層又怎麼迴圈訪問每個值。
-
while (my($k1, $v1) = each %hash) {
- while (my($k2, $value) = each %$v1) {
perl的array和hash都是一維的,如果要實現多維的必須要用 reference 來模擬。你要的二維雜湊當然可以。比如:
$hash{'A'}{'B'} = 'sth'; 即為一個二維雜湊賦值
等價於 $hash{'A'}->{'B'} = 'sth'; 即 $hash{'A'} 裡面儲存的是 hashref。上面的用法不過是語法糖而已。
使用
$hash{$key1}{$key2} = $value;
遍歷(注意加粗與加下劃線的語句)
foreach my $key1 (keys %hash)
{
my $hash2 = $hash{$key1};
foreach my $key2 (sort{$hash2->{$b}<=>$hash2->{a}} keys %$hash2)
{
print $key1.”\t”.$key2.”\t”.$hash2->{$key2}.”\n”;
}
}
對比單維雜湊
foreach my $key (sort{$hash{$b}<=>$hash
{$a}} keys %hash)
{
print $key.”\t”.$hash{$key}.”\n”;
}
實際中的應用:
比如一個二維Hash:
01 |
$VAR1 =
{ |
02 |
'0' =>
{ |
03 |
'lu_id' => '529' , |
04 |
'lu_contract_id' => '
' , |
05 |
'lu_name' => '上海XXXX科技有限公司' , |
06 |
'lu_loginid' => '上海XXXX' |
07 |
} |
08 |
}; |
09 |
'1' =>
{ |
10 |
'lu_id' => '784' , |
11 |
'lu_contract_id' => '
' , |
12 |
'lu_name' => '北京XXXX廣告' |
13 |
'lu_loginid' => '北京XXXX' |
14 |
} |
15 |
}; |
現在想把裡面所有的lu_id組成一個列表,程式如下:
1 |
foreach my $key ( sort keys %hash )
{ |
2 |
my $value = $hash { $key }; |
3 |
push @list , $value ->{ "lu_id" }; |
4 |
} |