2013-03-30 6 views
2

J'ai un hachage de tableaux.trier les clés dans le hachage de tableau par le nombre d'éléments dans le tableau

%HoA = (
    'C1' => ['1', '3', '3', '3'], 
    'C2' => ['3','2'], 
    'C3' => ['1','3','3','4','5','5'], 
    'C4' => ['3','3','4'], 
    'C5' => ['1'], 
); 

Les valeurs du tableau n'ont pas d'importance en soi. Je voudrais trier les clés par la taille du tableau dans l'ordre décroissant. La sortie devrait ressembler.

C3 # this key contains an array with the most elements 
C1 
C4 
C2 
C5 # this key contains an array with the least elements 

Je ne sais pas pourquoi cela ne fonctionne pas.

foreach my $key (sort { $HoA{$b} <=> $HoA{$a}} keys %HoA) { 
    print "$key\n"; 
} 

Répondre

4

Vous devez comparer les tailles de tableau:

+5

'{@ {$ HoA {$ b}} <=> @ {$ HoA {$ a}}}' fonctionne aussi (w/o ' scalar'), puisque la comparaison numérique force un contexte scalaire. – Kenosis

Questions connexes