Julian Hofmann: Array nummerisch sortieren - Variablen haben aber Form "NummerBuchstabe"

Hallo,

irgendwie komme ich nicht weiter. Ich habe in einem Array Variablen der Form "1.Zahl+2.Zahl+Buchstabe+Buchstabe..." zusammengefaßt. Den Inhalt möchte ich nun aber sortiert nach den 1. Zahlen ausgeben. Versuche es per sort zu erledigen schlugen fehl. Auch die Subroutine, die in SelfHTML zum nummerischen Sortieren gezeigt wird, funktioniert hier (bei mir) nicht. Welche Möglichkeiten gibt es noch?

Vielen Dank für alle Tips und Denkanstöße schon jetzt.

Grüße aus Bayreuth
Julian

P.S: Um wieviele Elemente es sich bei dem Array handelt ist vor Programmstart nicht klar. Die Elemente werden erst dort hineingepusht bzw. verändert.

  1. Hi,

    irgendwie komme ich nicht weiter. Ich habe in einem Array Variablen der Form "1.Zahl+2.Zahl+Buchstabe+Buchstabe..." zusammengefaßt. Den Inhalt möchte ich nun aber sortiert nach den 1. Zahlen ausgeben. Versuche es per sort zu erledigen schlugen fehl. Auch die Subroutine, die in SelfHTML zum nummerischen Sortieren gezeigt wird, funktioniert hier (bei mir) nicht. Welche Möglichkeiten gibt es noch?

    wenn Du wirklich Arrayelemente der Form "7+3+A+J" hast, sollte ein
    @array = sort { $a <=> $b } @array;
    schon ausreichen. Meintest Du dagegen Ziffern ("73AJ"), wird es schon etwas schwieriger :-)

    Immer noch lösbar allerdings:
    @array = sort { substr($a,0,1) <=> substr($b,0,1) } @array;

    Cheatah

    1. Hallo Cheatah,

      Immer noch lösbar allerdings:
      @array = sort { substr($a,0,1) <=> substr($b,0,1) } @array;

      Vielen Dank, hat mich zur Lösung gebracht. Einer meiner Ansätze war zwar ähnlich aber wohl doch irgendwie etwas anders, so daß mein Ansatz nicht funktionierte.

      Nochmals Danke.

      Gruß
      Julian

  2. Ich habe in einem Array Variablen der Form "1.Zahl+2.Zahl+Buchstabe+Buchstabe..." zusammengefaßt. Den Inhalt möchte ich nun aber sortiert nach den 1. Zahlen ausgeben. Versuche es per sort zu erledigen schlugen fehl. Auch die Subroutine, die in SelfHTML zum nummerischen Sortieren gezeigt wird, funktioniert hier (bei mir) nicht. Welche Möglichkeiten gibt es noch?

    Ich versuche, solche Sortierungen immer mit der trivialen sort-Funktion zu erledigen (also nach ASCII zu sortieren).

    Das erledigt nebenbei auch Dein Problem, wenn Du die Schlüssel passend wählst, also beispielsweise den numerischen Teil, z. B. mit Hilfe der Anweisung
          $key = sprintf ("%030d%s", $zahl, $alpha);
    mit führenden Nullen aufpumpst (wieviele, das hängt von der Größe und Menge Deiner Zahlen ab - wenn es wenige sind, kannst Du klotzen).

    Wenn Du dann "000047AB" und "000123XY" nach ASCII sortierst, erhältst Du das gewünschte Ergebnis. Hauptsache, der numerische Teil ist bei allen Schlüssel gleich lang.

    Noch etwas: Achte darauf, daß Du eindeutige tie-Breaker hinten an die Schlüssel hängst. Das macht das Abspeichern der Schlüsselwerte im Hash viel einfacher - man muß ja irgendwas gegen doppelte Schlüsselwerte tun, und sie zu verhindern ist die eleganteste Lösung.