2017-12-31 112 views
-1

Ich habe einen Hash-Array. Wenn ich versuche, sie abzurufen, werden die Werte im Array nicht entsprechend der Reihenfolge der entsprechenden Hash-Schlüssel gedruckt. Ich habe sowohl 'Tie :: IxHash :: Easy' und 'Tie :: Autotie' Tie :: IxHash 'verwendet, um den Hash zu binden.Perl: Abrufen von Hash-Werten in der Reihenfolge, in der sie erstellt wurden

Zum Beispiel:

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";;  
    } 

} 

Das Skript druckt 4032,86 und 4032,82, während ich es erwarte von 4.032,86 4.032,82 gefolgt zu drucken, wie die $ idAlignment {1} {r 1}} vor $ idAlignment erstellt wurde {1} {t1}.

Vielen Dank im Voraus

+0

Vielen Dank !!! Gibt es dafür ein Perl-Modul? –

+0

Was möchten Sie hier erreichen? Ich meine, ein Ansatz besteht darin, ein Array von Schlüsseln zu verwenden (oder zu sortieren), wenn Sie etwas tun, das geordnet werden muss. – Sobrique

Antwort

3

Ihr Problem ist nur, dass Sie eine Kopie der bestellten Hash in ein neues ungeordneten Hash% Aln machen. Verwenden Sie einfach die Referenz stattdessen:

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