Ich habe eine Liste von Website-URLs,
/node1
/node1/sub-node1
/node2
/node2/sub-node1
Die Liste wird mir in einer zufälligen Reihenfolge gegeben, ich muss sie so bestellen, dass zuerst die oberste Ebene folgt, dann die untergeordneten Ebenen usw. (weil ich /node2/sub-node1
nicht erstellen kann, ohne dass /node2
existiert). Gibt es einen sauberen Weg, dies zu tun?
Ich mache gerade einen rekursiven Aufruf und sage, wenn ich sub-node1
nicht erstellen kann, weil node2
exists ist, create node2
. Ich möchte, dass die Reihenfolge der Liste die Erstellung bestimmt und meinen rekursiven Aufruf loslässt.
Mein erster Gedanke war die Reihenfolge nach der Länge der Zeichenfolge ... aber dann dachte ich an eine Liste wie diese, die etwas wie Aliase für kurze Namen enthalten könnte:
%Vor%... und ich hielt es für eine bessere Option, zuerst nach der Anzahl der Trennzeichen zu sortieren:
%Vor%Dann habe ich noch etwas darüber nachgedacht und diese Zeile in Ihrer Frage gesehen:
Ich kann / node2 / sub-node1 ohne / node2 existend
nicht erstellen
Aha! Die Reihenfolge der Abschnitte oder innerhalb eines Abschnitts spielt keine Rolle, solange die Kinder immer nach den Eltern aufgelistet sind. In Anbetracht dessen war mein ursprünglicher Gedanke in Ordnung, und die Reihenfolge nach der Länge der Saite sollte in Ordnung sein:
%Vor%Was mich schließlich dazu brachte mich zu fragen, warum ich mich überhaupt für die Länge interessierte? Wenn ich die Strings unabhängig von ihrer Länge sortiere, sortieren Strings mit dem gleichen Anfang immer zuerst die kürzere Strings. So, endlich:
%Vor%Ich werde die erste Probe zurücklassen, weil es nützlich sein kann, wenn Sie irgendwann eine lexikalischere oder logischere Sortierreihenfolge benötigen.
Gibt es einen sauberen Weg, dies zu tun?
Wenn Sie nur die Liste der URIs mit einer Standard-String-Sortierung sortieren, sollten Sie das bekommen, was Sie brauchen. Im Allgemeinen wird "a" in einer String-Sortierung vor "aa" angeordnet, sodass "/ node1" vor "/ node1 / sub-node" enden sollte.
Zum Beispiel:
%Vor%Dies wird gedruckt:
%Vor%Am besten verwenden Sie die natürliche Sortierung, da Ihre Saiten zwischen Saiten und Zahlen gemischt sind. Denn wenn Sie andere Sortiermethoden oder -techniken verwenden, haben Sie folgendes Beispiel:
%Vor%Die Ausgabe ist:
%Vor%was nicht sortiert ist.
Sie können sich diese Implementierung ansehen / p>
Wenn Sie meinen, dass Sie alle Knoten der ersten Ebene vor allen Knoten der zweiten Ebene benötigen, sortieren Sie nach der Anzahl der Schrägstriche /
:
Ergebnis:
%Vor%Wenn Sie nur Elternknoten vor Kindknoten benötigen, ist es nicht viel einfacher als
%Vor%Ergebnis:
%Vor%Rekursion ist eigentlich genau das, was Sie verwenden sollten, da dies am einfachsten durch eine Baumstruktur dargestellt wird.
%Vor%Was können Sie dann so verwenden:
%Vor%Was sollte gedruckt werden:
%Vor%