Hi!
Das ganze soll in Perl geschrieben werden?
Ja. Aber es spielen designfragen eine Rolle. Reduziere die Vergleiche auf das Minimum.
Ich hatte nur nachgefragt, weil ich von Perl keine Ahnung habe. Aber (auch wenn ich jetzt gleich von Perl'ern gesteinigt werde) was in PHP geht, lässt sich imho ja auch in Perl realisieren, und das meist sogar sehr ähnlich.
Mein Denkansatz geht in
die Richtung, dass ich das Gesamt-Array in Teil-Arrays splitten würde und zwar jeweils in solche mit Strings gleicher Länge.
definiere "gleiche Länge"
offensichtlich gibt es keine definierte Länge für die subchunks.
Mit gleicher Länge meinte ich strlen($a) == strlen($b), also die Anzahl der Zeichen im jeweiligen String. Aber ich habe gestern Abend dein Beispiel wohl fehlinterpretiert.
Aber heute, nach nochmaligem Studium, erscheint es mir "unlogisch", bzw. "fehlerhaft/ inkosistent".
Du schreibst:
...
a
aa
b
...
d1ab1
d1ab2
d1ab11
...
Das sah für mich auf den ersten Blick so aus (aufgrund des zweiten Parts, den ich zitiert habe), als wenn gelten würde, dass wenn strlen($a) > strlen($b) dann für die Sortierung gilt $b < $a.
Diese dann per einer 08/15 Standard-Sortierfunktion sortieren lassen und zum Schluss wieder zu einem einzigen Array zusammenfügen.
mal naiv. Länge der Subchunks = 1
sortiere 72b und 7a3
Nach meiner Vorstellung ist
7.a.3 < 72.b.
Nach deiner Vorstellung aber
7.a.3 > 72.b.
Hier verstehe ich deine beabsichtigte Sortierreihenfolge schon nicht mehr.
- Sind Zahlen generell "kleiner" als Buchstaben?
- Wird jede Ziffer einzeln betrachtet, oder ist a8b < a72b, weil 8 < 72? Und welche Basis (10)?
simple sort reicht auf keinen Fall.
Aber die Sortiersub ist hier kein Problem. Die bekomme ich schon hin.
Die Frage ist bloss, ist es sinnvoll, unnötige (weil undef) Felder für alle Elemente des Arrays zu erzeugen?
Ab hier kann ich dir nicht mehr ganz folgen, aber imho kann es grundsätzlich keinen Sinn machen, irgendwelche "undef" Felder in irgendeine Form von Sortierung einzubeziehen.
Das will ich vermeiden. Darum denke ich an die Erzeugung eines hashes von hashes.
Die Elemente
'', 0,0,0, 1, '1ac', 'a', 'a1', 'a11'
sollten zuerst in diese Datenstruktur umgebaut werden:
%elem = (
undef => [1,],
0 => [3,], # 3 Elemente 0
1 => [1,
{ac=>[1,]},
],
a => [1,
{
1=>[1,],
11=>[1,],
},
],
);
Diesen hash kann ich dann rekursiv sortiert ausgeben, bzw einen sortieren Array zusammenbauen.
Ab hier kann ich dann gar nicht mehr folgen.
Meiner (sehr bescheidenen) Erfahrung nach, liegt das "Problem" aber auch eher auf der Seite der "Datenstruktur", wenn man mit den "normalen" Sortierfunktionen nicht auskommt. Da du aber nicht verraten hast, wo und wie diese zu sortierenden Daten herkommen, kann man dazu nichts sagen.
Sorry, dass ich keinen brauchbaren Tipp für dich habe, aber ich werde den Thread aufmerksam verfolgen, um deine Lösung, die du bestimmt finden wirst, zu studieren. Vielleicht verstehe ich dann im Nachhinein auch deine jetzigen Überlegungen. ;-)
Viel Erfolg!
Gruß Gunther