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。上面的用法不过是语法糖而已。


转自:UncleTuu’s Tech Notes

使用
$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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值