Thread Sort Array of Hashes by Key (7 answers)
Opened by devrand at 2012-09-18 21:12

Linuxer
 2012-09-18 22:44
#161916 #161916
User since
2006-01-27
3881 Artikel
HausmeisterIn

user image
Hi,

schauen wir uns doch mal den Code an:

Code: (dl )
1
2
3
4
5
my @sorted =
map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [ $_, keys %$_ ] }
@unsorted;


Am besten liest man es von hinten nach vorne:

map { [ $_, keys %$_ ] } @unsorted
für jedes Element von @unsorted wird eine eigene Array-Referenz erzeugt; das originale Element ist das erste Element, die weiteren Elemente sind die Schlüssel des "internen Hashes". Wir haben Glück, dass jeder Hash nur einen Schlüssel hat, daher ist das zweite Element eben genau der Schlüssel, nach dem wir sortieren wollen.

sort { $a->[1] cmp $b->[1] }
sort bekommt jetzt diese Liste von Array-Referenzen und sortiert diese lexikalisch nach dem zweiten Element

my @sorted = map { $_->[0] }
dieses map liefert nun aus der sortierten Liste von Array-Referenzen die jeweils ersten Elemente. Da hatten wir ja die Originale abgelegt, also liefert es uns nun die Hash-Referenzen aus @unsorted in der gewünschten Reihenfolge, die nun in @sorted abgelegt werden.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Sort Array of Hashes by Key