2.5 perl--二维哈希

二维哈希:

使用$hash{$key1}{$key2} = $value;

遍历(注意加粗与加下划线的语句)

foreach my $key1 (sort keys %hash) #首先对key1进行排序
{    
     foreach my $key2 (sort {$hash{$key1}->{$b}<=>$hash{$key1}->{a}} keys %{$hash{$key1}}) #对value值按照数字大小进行逆序排序
#    foreach my $key2 (sort {$a<=>$b} keys %{$hash{$key1}})   
#对key2按照数字大小进行排序
{
    print $key1."t".$key2."t".$hash{$key1}->{$key2}."n";
}
}

对比单维哈希

foreach my $key (sort{$hash{$b}<=>$hash{$a}} keys %hash)  #标红的是什么意思呢?
{
    print $key."t".$hash{$key}."n";
}

对比数组

方法一:@array2 = sort(@array)

方法二(遍历):

foreach my $a (sort @array){

       print $a. "t";
}

查看二维哈希

use strict;
use warnings;
my %hash=(a=>{1=>10,2=>20},b=>{3=>30,4=>40});
foreach my $key1 (keys(%hash))

{
    print("\$hash{$key1} has keys:".join(',',keys(%{$hash{$key1}})),"\n");
}

实际中的应用:

比如一个二维Hash:

$VAR1 = {
          '0' => {
                   'lu_id' => '529',
                   'lu_contract_id' => ' ',
                   'lu_name' => '上海XXXX科技有限公司',
                   'lu_loginid' => '上海XXXX'
                 }
        };
         '1' => {
                   'lu_id' => '784',
                   'lu_contract_id' => ' ',
                   'lu_name' => '北京XXXX广告'
                   'lu_loginid' => '北京XXXX'
                 }
        };

现在想把里面所有的lu_id组成一个列表,程序如下:

foreach my $key (sort keys %hash) {
    my $value = $hash{$key};
    push @list,$value->{"lu_id"};
}

参考资料:

个人公众号,比较懒,很少更新,可以在上面提问题:

更多精彩,请移步公众号阅读:

Sam avatar
About Sam
专注生物信息 专注转化医学