2017-12-31 169 views
-1

私は配列のハッシュを持っています。それらを取得しようとすると、対応するハッシュキーの順序に従って配列の値が出力されません。私は を使用しました。 'Tie :: IxHash :: Easy'と 'Tie :: Autotie' Tie :: IxHashはハッシュを結びつけています。例えばPerl:作成された順にハッシュ値を取得する

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)[email protected]_; 
    my %Aln=%{$alnRef}; 
    foreach my $k(keys %Aln){ 
     print $Aln{$k}[$colIndex],"\n";;  
    } 

} 

私はそれが$ idAlignment {1} {R1は}} $ idAlignment前に作成されたとして4032.82が4032.86続く印刷を期待する一方、スクリプトは、4032.86と4032.82印刷{1} {t1}。事前

+0

ありがとうございました!それを行うPerlモジュールはありますか? –

+0

ここで何を達成しようとしていますか?つまり、注文する必要がある場合は、キーの配列(またはソート)を使用する方法があります。 – Sobrique

答えて

3

おかげで、あなたの唯一の問題は、あなたが新しい順不同ハッシュ%ALNに注文したハッシュのコピーを作っているということです。代わりに参照を使用してください:

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