Thread Array mit Hashes sortieren und Elemente entfernen
(10 answers)
Opened by bianca at 2015-09-08 19:49 2015-09-09T05:07:15 bianca Effizienzannahmen sind immer falsch, sofern man sie nicht getestet hat :-) Ersthaft: das sort sortiert dir ein Array von Hash-Referenzen. Solange das Sortieren nicht abgeschlossen ist, kannst du den Sort-Key aber nicht aus dem Hash löschen. Wie soll es also möglich sein, gleichzeitig zu sortieren und den Key zu löschen? Man könnte höchstens den Sortieralgorithmus selbst neu implementieren und in diesem dann direkt den Key löschen, sobald das entsprechende Element seinen richtigen Platz in der Sortierung gefunden hat. Ich bezweifle aber, dass das helfen würde. Um das Hinzufügen und Löschen des Hash-Keys zu sparen, könnte man alternativ ein Array nutzen, in welchem man die sortierten Positionen speichert. In deinem Beispiel würde dann sein: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 use strict; use warnings; use Data::Dumper; my @unsortiert = ( { name => 'alpha', test => 'I', }, { name => 'beta', test => 'II', }, { name => 'gamma', test => 'III', }, ); # anstatt nun den Hashes aus @unsortiert die Sort-Keys zu berechnen # und im jeweiligen Hash zu speichern, speicherst du die Sort-Keys in # einem Array. my @sortValues = (2, 1, 3); # Das Ursprungsarray bleibt unverändert, wir sortieren nur ein neues # Array, das mir die Indizes sortiert. my @sortIdx = sort { $sortValues[$a] <=> $sortValues[$b] } (0..$#unsortiert); for (@sortIdx) { print Dumper $unsortiert[$_] } Wenn das Hinzufügen und Löschen der sorter-Keys wirklich ein Problem darstellt, könnte obiges schneller sein. Außerdem sollte ein Array-Zugriff auch schneller sein als ein Hash-Zugriff. Aber ich will nichts garantieren, bitte austesten! Last edited: 2015-09-09 09:42:14 +0200 (CEST) |