深さ優先探索みたいなソートを再帰無しで書きたい。
そんなときに!
下のコードの表示先はListBox1だから気を付けてね。
やってることは簡単で、
符号の順序を利用してソートすれば、
再帰的なソートを必要とするモノでも再帰コード書かなくていいよ、速いよって事。
並び替えるモノを符号化してソートすると意外と簡単にできたりする。
もちろん一旦符号化しないといけないからその分の時間は掛かるけどね。
Dim folders As String() = System.IO.Directory.GetDirectories("C:\hogehoge\", "*", 1) Dim files As String() = System.IO.Directory.GetFiles("C:\hogehoge", "*", 1) 'ソート Array.Sort(folders) Array.Sort(files) '見つけたものを次々に符号化 Dim 符号リスト As New Hashtable Dim パス As String Dim ノードリスト As String() Dim ノード As String Dim インデックス As Int32 = 0 For Each パス In folders ノードリスト = パス.Split("\"c) For Each ノード In ノードリスト If Not 符号リスト.ContainsKey(ノード) Then 符号リスト(ノード) = "," & インデックス.ToString("D6") インデックス += 1 End If Next Next For Each パス In files Dim ファイルデータ = New System.IO.FileInfo(パス) ノードリスト = パス.Split("\"c) For Each ノード In ノードリスト If ノード = ファイルデータ.Name Then 符号リスト(ノード) = "-" & インデックス.ToString("D6") インデックス += 1 ElseIf Not 符号リスト.ContainsKey(ノード) Then 符号リスト(ノード) = "," & インデックス.ToString("D6") インデックス += 1 End If Next Next 'ソートリストを用意 Dim sss As New SortedList(Of String, String) Dim aaa As New Text.StringBuilder 'Keyは符号化したやつ、 For Each パス In folders ノードリスト = パス.Split("\"c) aaa.Clear() For Each ノード In ノードリスト aaa.Append(符号リスト(ノード)) Next sss.Add(aaa.ToString, パス) Next For Each パス In files Dim ファイルデータ = New System.IO.FileInfo(パス) ノードリスト = パス.Split("\"c) aaa.Clear() For Each ノード In ノードリスト aaa.Append(符号リスト(ノード)) Next sss.Add(aaa.ToString, パス) Next For Each パス In sss.Values ListBox1.Items.Add(パス) Next