2017-08-18 2 views
-2

I einen Hash haben wie folgt:Sortieren einer Hash von Hash-Schlüssel von der zweiten Ebenen in Perl

  '4' => { 
        '25' => 'X', 
        '24' => 'Y', 
        '23' => 'Z' 
       }, 
      '3' => { 
        '22' => 'S', 
        '15' => 'T' 
       }, 
      '2' => { 
        '11' => 'A', 
        '21' => 'B', 
        '9' => 'C', 
        '17' => 'D', 
        '12' => 'E', 
        '20' => 'F', 
        '14' => 'G', 
        '4' => 'H', 
        '18' => 'I', 
        '19' => 'J', 
        '16' => 'K', 
        '10' => 'L', 
        '13' => 'M' 
       } 

I zunächst auf der Grundlage der Primärschlüssel oder den ersten Schlüssel sortiert werden sollen, die 2,3,4 ist . Dann gilt für jeden der Schlüssel, sagen für 4, I für Sekundärschlüssel sortiert werden soll, so wird die erwartete Ausgabe sein:

  '4' => { 
        '23' => 'Z', 
        '24' => 'Y', 
        '25' => 'X' 


       }, 
      '3' => { 
        '15' => 'T', 
        '22' => 'S' 

       }, 
      '2' => { 
        '4' => 'H', 
        '9' => 'C', 
        '10' => 'L', 
        '11' => 'A', 
        '12' => 'E', 
        '13' => 'M', 
        '14' => 'G', 
        '16' => 'K', 
        '17' => 'D', 
        '18' => 'I', 
        '19' => 'J', 
        '20' => 'F', 
        '21' => 'B' 
       } 

Ich habe versucht, diesen Code, aber die Sekundärschlüssel sind nicht sortiert bekommen:

foreach $parentKey (sort {$a <=> $b} keys %orderedChoiceNameHash) { 
    for $childKey (sort {$orderedChoiceNameHash{$a} <=> $orderedChoiceNameHash{$b}} keys %{ $orderedChoiceNameHash{$parentKey}}) { 
     print $fh "$parentKey ::::: $childKey ::::: $orderedChoiceNameHash{$parentKey}{$childKey}\n"; 
    } 
} 
+1

Willkommen bei stackoverflow. Können Sie uns bitte zeigen, was Sie versucht haben, Ihren Code? Hier werden normalerweise Fragen zu bestimmten Problemen mit ihrem Code gestellt. Es ist kein Ort, an dem man einfach Code für sie schreiben möchte. – zdim

+0

foreach $ parentKey (sort {a $ <=> $ b} keys% orderedChoiceNameHash) { \t für $ childKey (sort {$ orderedChoiceNameHash {$ a} <=> $ orderedChoiceNameHash {$ b}} keys% {$ orderedChoiceNameHash {$ parentKey}}) { \t \t print $ fh "$ parentKey ::::: $ childKey ::::: $ orderedChoiceNameHash {$ parentKey} {$ childKey} \ n"; \t} } –

+0

Das obige ist der Code, den ich ausprobiert habe. Aber die sekundären Schlüssel werden nicht sortiert. –

Antwort

2
foreach my $key1 (sort {$b<=>$a} keys %hash) 
{ 
    foreach my $key2 (sort {$a<=>$b} keys %{ $hash{$key1} }) 
    { 
     print "$key1\t$key2\t$hash{$key1}{$key2}\n"; 
    } 
} 
+0

Ausgabe des obigen Codes wird wie erster Schlüssel in absteigender Reihenfolge ($ b <=> $ a) und zweiter Schlüssel in aufsteigender Reihenfolge ($ a <=> $ b) sortiert sein. Wenn Sie den ersten Schlüssel in aufsteigender Reihenfolge sortieren möchten, verwenden Sie einfach $ a <=> $ b. –