Thread Sortierung mehrdimensionaler Arrays (9 answers)
Opened by renee at 2003-12-18 16:25

havi
 2003-12-18 16:33
#76549 #76549
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Mit Perl muss man haeufig auch komplexere Datenstrukturen sortieren.
Man kann die Datenstrukturen entweder zerlegen und einen der oben
erklaerten Algorithmen verwenden. Perl bietet allerdings auch
maechtigere Mittel an, wie z.B. die Schwartzian Transform:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
my @list = ( [0, 3, 2, 4],
[1, 3, 1, 5],
[2, 9, 5, 2],
); # zweidimensionales Array => Sortierung nach Spalte 4

1: my $sortedList = # von unten nach oben lesen
2: map { $_->[1] } # werfe 0. Spalte weg und gebe Originalliste zurueck
3: sort { $a->[0] <=> $b->[0] } # sortiere neue Listenreferenz nach 0. Spalte
4: map { [ $_->[3], $_ } } # mache 2dim-Listenreferenz daraus: [ $_[3], [...] ]
5: @list; # nehme Liste


Beschreibung:

Zeilen 5 + 4: Mache aus der Liste eine zweidimensionale Liste,
deren erste Dimension das Feld ist, nach dem sortiert werden soll
(In unserem Fall also das Element mit dem Index 3) und die zweite
Dimension ist eine Referenz auf die Zeile (z.B. [0,3,2,4]).

Code: (dl )
1
2
3
@tempList = ( [4, [0, 3, 2, 4] ],
[5, [1, 3, 1, 5] ],
[2, [2, 9, 5, 2] ] );


Zeile 3: Sortiere diese temporaere Liste nach 0. Index

Code: (dl )
1
2
3
4
@tempList = ( [2, [2, 9, 5, 2] ],
[4, [0, 3, 2, 4] ],
[5, [1, 3, 1, 5] ]
);


Zeile 2: Gebe die Spalte mit dem Index 1 der nun sortierten Liste zurueck

Code: (dl )
1
2
3
4
@sortedList = ( [2, 9, 5, 2],
[0, 3, 2, 4],
[1, 3, 1, 5]
);


Zu finden auf Strat's Homepage

Gruss

View full thread Sortierung mehrdimensionaler Arrays