2009-05-05 4 views
3

Ich brauche eine Liste zu sortieren, die Pfade (relativ oder absolut) enthält, so dass der tiefste Pfad zuerst erscheint, zum Beispiel:Sortieren einer Liste mit Pfaden durch tiefste Verzeichnis

\ Neuer Ordner \ element1 \ tools \ 1
\ Neuer Ordner \ element1 \ tools
\ Neuer Ordner \ element1
\ Neuer Ordner
etc ...

gibt es eine API in Path c lass ich das machen?

Danke! J.

Antwort

6

Das ist ein bisschen out-of-the-box, aber man konnte dies immer tun:

var sortedList = list.OrderByDescending(
    p => p.Count(c => c == Path.DirectorySeparatorChar 
     || c == Path.AltDirectorySeparatorChar)); 

Das heißt, einfach um, wie oft der Pfad Trennzeichen angezeigt wird.

+0

So würde ich es auch machen! – Cerebrus

+0

Dies erfordert, dass alle Pfade absolut sind. Das ist eine gute Voraussetzung, da man nie weiß, wo die relativen Pfade waren. –

+0

Ja, das stimmt - Sie müssen möglicherweise Path.GetFullPath für jede Zeichenfolge aufrufen und sie mit dem "root" -Pfad versehen, von dem Sie wissen, dass sie alle zugeordnet sind. –

2

Ich nehme an, diese Pfade sind Strings, also warum nicht einfach in absteigender Reihenfolge sortieren?

var paths = new List<string> 
{ 
    "\\New Folder", 
    "\\New Folder\\tools", 
    "\\Windows", 
    "\\Windows\\System32", 
    "\\New Folder\\tools\\1", 
}; 

var result = paths.OrderByDescending(s => s); 

Oder wenn sie in einem string[] sind, können Sie verwenden:

Array.Sort(paths); 
Array.Reverse(paths); 

Ergebnis ist:

\ Windows \ System32
\ Windows
\ Neuer Ordner \ Tools \ 1
\ Neuer Ordner \ tools
\ Neuer Ordner