Ich habe einen Hash, der Schlüssel enthält, die Datenbank-Indexen entsprechen, aber die Datenbank kann mehrdimensionale Datensätze haben, so dass der Schlüssel ein einzelner Index oder eine Liste von Indizes sein kann.
Ich muss einen Weg finden, diese Datensätze zu sortieren, damit ich sie in einer logischen Reihenfolge ausdrucken kann.
Beispiel:
%Vor%Ich möchte, dass es zuerst nach dem tiefsten Index sortiert wird. Wenn der Wert ganz links identisch ist, möchte ich zum nächsten Wert gehen und diese vergleichen. Wenn diese identisch sind, möchte ich mit dem nächsten fortfahren ... und so weiter ... bis alle Möglichkeiten ausgeschöpft sind.
Dies wird höchstwahrscheinlich eine gewisse Rekursion beinhalten, aber ich kann nicht herausfinden, wie Rekursion mit diesen fancy $a
und $b
Variablen funktioniert.
Was kann ich in some_function
eingeben, um die folgende Ausgabe zu erhalten?
Ich dachte, das Modul > Sort::Naturally
würde Ihnen hier helfen, scheint aber nicht
Ich muss einen Fehler in meinem Test gehabt haben. Das funktioniert gut
%Vor% Ich empfehle entweder diese oder die Sort::Key::Naturally
Lösung, da sie am klarsten sind
Es ist eine schlechte Praxis, die Geschwindigkeit der Ausführung zu verfolgen, besonders auf Kosten der Lesbarkeit, bevor es Beweise dafür gibt, dass eine gegebene Lösung zu langsam ist. Selbst dann ist es töricht, Teile deines Codes zufällig zu optimieren, in der Hoffnung, einen Unterschied zu machen, und deine Lösung sollte durch einen Profiler laufen, um herauszufinden, wo es am fruchtbarsten wäre, Verbesserungen vorzunehmen.
Es ist keine Rekursion erforderlich. Dieses Programm zeigt eine Sortierunterroutine by_elements
, die einfach jedes Element in der Liste vergleicht, bis es entweder eine Nichtübereinstimmung oder das Ende einer der Listen findet
Im ersten Fall ist das Ergebnis nur der Vergleich der beiden unterschiedlichen Elemente, und im letzteren Fall ist es ein Vergleich der Anzahl der Elemente in den beiden Listen
%Vor%