Wie bestelle ich diese Liste von Site-URLs in C #?

8

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.

    
chum of chance 14.06.2013, 16:04
quelle

7 Antworten

5

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.

    
Joel Coehoorn 14.06.2013, 16:13
quelle
2
  

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%     
Reed Copsey 14.06.2013 16:09
quelle
2

Vielleicht funktioniert das für Sie:

%Vor%

Ergebnis:

%Vor%     
Tim Schmelter 14.06.2013 16:14
quelle
0
%Vor%     
Casey 14.06.2013 16:15
quelle
0

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>     

Alyafey 14.06.2013 16:44
quelle
0

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 / :

%Vor%

Ergebnis:

%Vor%

Wenn Sie nur Elternknoten vor Kindknoten benötigen, ist es nicht viel einfacher als

%Vor%

Ergebnis:

%Vor%     
jerry 14.06.2013 16:11
quelle
0

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%     
Chris Doggett 14.06.2013 18:15
quelle

Tags und Links