Perl:按照创建的顺序检索哈希值

时间:2017-12-31 22:31:23

标签: perl hash

我是一个数组哈希。当我尝试检索它们时,不会根据相应散列键的顺序打印数组中的值。我已经习惯了 两个' Tie :: IxHash :: Easy'并且' Tie :: Autotie' Tie :: IxHash'把哈希捆绑起来。

例如:

use strict;
use warnings;
use Tie::IxHash::Easy;

tie my  %idAlignment, 'Tie::IxHash::Easy';

@{$idAlignment{1}{r1}} = qw/4032.82 4145.04 4519.05 4527.46 5144.13/;
@{$idAlignment{1}{t1}} = qw/4032.86 4144.92 4519.11 - -/;

printAlnCols($idAlignment{1},0);

sub printAlnCols{
    my($alnRef,$colIndex)=@_;
    my %Aln=%{$alnRef};
    foreach my $k(keys %Aln ){
        print $Aln{$k}[$colIndex],"\n";;    
    }

}

该脚本打印4032.86和4032.82,而我希望它打印4032.82后跟4032.86,因为$ idAlignment {1} {r1}}是在$ idAlignment {1} {t1}之前创建的。

提前致谢

1 个答案:

答案 0 :(得分:3)

您唯一的问题是您正在将有序哈希的副本复制到新的无序哈希值Aln中。只需使用引用:

sub printAlnCols {
    my ($alnRef,$colIndex) = @_;
    foreach my $k(keys %$alnRef){
        print $alnRef->{$k}[$colIndex],"\n";;
    }
}