我想對錶示路徑的字符串列表進行排序。排序結果將具有分層順序。VB.NET中字符串路徑的排序列表
我的意思是:對於每個目錄路徑,我希望在第一次列出該路徑中的所有文件(按字母順序排列或不是無關緊要)。然後,將列出每個子目錄路徑。對於每個子目錄,我想要所有文件...等等。
下面是一個例子:
(前)
emule/changelog.txt
emule/config/
emule/config/adresses.dat
emule/config/nodes.dat
emule/config/webservices.dat
emule/eMule.tmpl
emule/eMule_Chicane.tmpl
emule/license.txt
emule/license-GER.txt
emule/readme.txt
emule/Skin/
emule/Skin/Daan-V2-8.eMuleSkin.ini
emule/Skin/DaanV2-8/
emule/Skin/DaanV2-8/back.ICO
emule/Skin/DaanV2-8/WebServer.ico
emule/Template.eMuleSkin.ini
emule/webserver/
emule/webserver/add_server.gif
emule/webserver/arrow_down.gif
emule/webserver/arrow_right.gif
emule/webserver/yellow.gif
emule/emule.exe
(後)
emule/changelog.txt
emule/emule.exe
emule/eMule.tmpl
emule/eMule_Chicane.tmpl
emule/license.txt
emule/license-GER.txt
emule/readme.txt
emule/Template.eMuleSkin.ini
emule/config/
emule/config/adresses.dat
emule/config/nodes.dat
emule/config/webservices.dat
emule/Skin/
emule/Skin/Daan-V2-8.eMuleSkin.ini
emule/Skin/DaanV2-8/
emule/Skin/DaanV2-8/back.ICO
emule/Skin/DaanV2-8/WebServer.ico
emule/webserver/
emule/webserver/add_server.gif
emule/webserver/arrow_down.gif
emule/webserver/arrow_right.gif
emule/webserver/yellow.gif
我試圖像的Array.Sort(許多解決方案)用自定義IComparable的功能。
你有什麼想法嗎?非常感謝。
編輯:這裏是我的IComparable的方法
zipEntries.Sort(AddressOf compareZipEntryFilenames)
Private Function compareZipEntryFilenames(ByVal x As Object, ByVal y As Object) As Integer
Dim one As String = CType(x, ZipEntry).FileName
Dim two As String = CType(y, ZipEntry).FileName
If Path.GetDirectoryName(one) = Path.GetDirectoryName(two) Then
Return String.Compare(one, two)
Else
Select Regex.Matches(one, "/").Count.CompareTo(Regex.Matches(two, "/").Count)
Case -1 'one has less/than two; so one then two
Return -1
Case 1 'one has more/than two; so two then one
Return 1
Case Else ' = 0, same number of /; so alphabetical sorting
Return String.Compare(one, two)
End Select
End If
End Function
請發佈您編寫的自定義IComparable方法。我認爲這是正確的做法。 – 2010-08-14 09:53:48
它看起來像你的函數應該工作 - 但是,它不是'執行'IComparable.CompareTo。 – 2010-08-14 10:53:53
沒有。問題是,在最後一步,在確定嵌套級別之後,應該比較目錄,而不是文件名。看到我的答案。此外,您不必實現接口,還有其他重載。 – GSerg 2010-08-14 11:28:59