1. 程式人生 > >Perl – 遍歷二維Hash

Perl – 遍歷二維Hash


    你都二維了用一層又怎麼迴圈訪問每個值。

  1. while (my($k1, $v1) = each %hash) {
  2.     while (my($k2, $value) = each %$v1) {
複製程式碼 在這個迴圈裡面 $k1,$k2,就是兩維 key, $value 就是你要的值, $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 }