Sortierproblem

20/11/2009 - 20:43 von Jan Schmidt | Report spam
Hallo NG,

ich habe ein großes Array mit Strings der Form

/#(\d*):(.*) \((.*)\)/

Wie sortiere ich das am geschicktesten zuerst nach $3 und dann nach $1?

Bsp:
#1: a (b)
#2: b (a)
#3: b (b)

soll werden:

#2: b (a)
#1: a (b)
#3: b (b)

Ich hab das jetzt so gemacht, dass ich einen Hash erzeugt habe, der die
Strings als values und eine fortlaufende Nummer als keys hat. Damit ist
zumindest die erste Aufgabe leicht zu lösen aber für das sortieren nach
der Zahl müßte ich dann das sortierte Array nochmal elementweise
durchgehen, Gruppen bilden (z.B. ein temporàres Array) und dann das
Array sortieren.

Das muß doch auch einfacher gehen. Vielen Dank für Anregungen.

jan
 

Lesen sie die antworten

#1 Martin Vorlaender
20/11/2009 - 20:02 | Warnen spam
Jan Schmidt wrote:
ich habe ein großes Array mit Strings der Form

/#(\d*):(.*) \((.*)\)/

Wie sortiere ich das am geschicktesten zuerst nach $3 und dann nach $1?

Bsp:
#1: a (b)
#2: b (a)
#3: b (b)

soll werden:

#2: b (a)
#1: a (b)
#3: b (b)

Ich hab das jetzt so gemacht, [...]

Das muß doch auch einfacher gehen. Vielen Dank für Anregungen.



Stichwort "Schwartz'sche Transformation" [1]:

my @sorted map { $_->[0] }
sort { $a->[3] cmp $b->[3] || $a->[1] cmp $b->[1] }
map { /#(\d*):(.*) \((.*)\)/; [$_, $1, $2, $3] }
@data;

HTH,
Martin

[1] z.B. http://perl-seiten.homepage.t-onlin..._schw.html
One OS to rule them all | Martin Vorlaender | OpenVMS rules!
One OS to find them | work:
One OS to bring them all | http://vms.pdv-systeme.de/users/martinv/
And in the Darkness bind them.| home:

Ähnliche fragen