User since
2006-04-14
66
Artikel
BenutzerIn
Hallo Leute,
wie kann ich am einfachsten ein gefülltes Array nach vorgegebenen Mustern sortieren?
Angenommen, ich habe ein Array, das folgendermassen gefüllt ist:
@array = qw/abcxyz abc-xyz abc_xyz xyz-abc xyzabc xyz_abc/;
Nun möchte ich @array sortieren und zwar so, dass zu erst alle Teile mit "-", dann alle mit "_", dann der Rest kommen. Mein Muster wäre also erst "-", dann "_", dann der Rest, so dass am Ende ein sortiertes Array folgendermassen aussehen müsste:
@arraySortiert = qw/abc-xyz xyz-abc abc_xyz xyz_abc abcxyz xyzabc/;
Ich habe es probiert und dabei sind die wildesten Konstrukte entstanden...So habe mir ein Hilfsarray gemacht @hilfe = qw/- _/, und danach @array mit while durchgelaufen und bei match shift gemacht. Es sieht aber ziemlich schrecklich aus und das muss einfacher gehen. Ich habe aber momentan keine Idee, wie ich es angehen soll. Ich schätze grep und map sind hier die Zaubermitteln.
Hat jemand eine Idee, wie man dieses Problemchen am einfachsten lösen kann?
Danke!
T.
User since
2008-07-15
1000
Artikel
BenutzerIn
der Knackpunkt ist doch weniger die Schwartzsche Transformation, sondern dass man Sortierungsterme mittels OR hintereinanderschalten kann, oder? [*]
Der Trick ist das dank lazy-Evaluation von OR der 2. term erst evaluiert wird, wenn der erste 0 und falsch ist (was gdw. der Fall ist wenn die Arrayeinträge in der gleichen Klasse liegen, also (- und -) oder (_ und _) ... )
Schwartz machts nur schneller...
NACHTRAG: wenn in einem string sowohl _ als auch - auftreten, wirds übrigens mit diesem Ansatz komplizierter.
[*] was übrigens ein sehr schöner Trick ist.