2016-04-25 4 views
0

オブジェクト...カスタムのリストにファイルパスをソートすることは、私はそれのクラスで次のプロパティを持つカスタムオブジェクトを持っている

public class MyFile 
{ 
    private string m_Name; 
    public string Name 
    { 
     get { return m_Name; } 
     set { m_Name= value; } 
    } 

    private string m_Path; 
    public string Path 
    { 
     get { return m_Path; } 
     set { m_Path= value; } 
    } 
} 

私は次のようになり、これらのオブジェクトのリストを持っている...

私はそれらは、例えば、(それらは、ディレクトリ・パスをリストツリービューに表示される方法に類似)順にソートしたい
listItems[0].Name = "test1"; listItems[0].Path = "Root/SubDir1/SubDir2"; 
listItems[1].Name = "test30"; listItems[1].Path = "Root"; 
listItems[2].Name = "t14"; listItems[2].Path = "Root/SubDir20/SubDir16"; 

...

test30 (Root) 
test1 (Root/test30) 
test5 (Root/test30) 
test44 (Root) 
SubDir (Root/test44) 
SubDir6 (Root/test44/SubDir) 
test1 (Root/test44/SubDir/SubDir6) 
zSubDir1 (Root) 
SubDir2 (Root/zSubDir1) 
test8 (Root/zSubDir1/SubDir2) 
test9 (Root/zSubDir1/SubDir2) 
test10 (Root/zSubDir1/SubDir2) 

これを達成する最良の方法は何ですか? List<MyFile> sortedList = folders.OrderBy(p => p.Path).ToList();のようなことをしてもらえますか?

答えて

1

はい、あなたはこのオブジェクトのコレクションを並べ替えるのにlinqを簡単に使うことができます。

var x1 = new MyFile{ Name = "test30", Path = "Root" }; 
var x2 = new MyFile{ Name = "test1", Path = "Root/test30" }; 
var x3 = new MyFile{ Name = "test5", Path = "Root/test30" }; 
var x4 = new MyFile{ Name = "test44", Path = "Root" }; 
var x5 = new MyFile{ Name = "SubDir", Path = "Root/test44/SubDir" }; 
var x6 = new MyFile{ Name = "SubDir6", Path = "Root/test44/SubDir/SubDir6" }; 
var x7 = new MyFile{ Name = "test1", Path = "Root" }; 
var x8 = new MyFile{ Name = "SubDir2", Path = "Root/zSubDir1" }; 

var lst = new List<MyFile>{ 
    x1,x2,x3,x4,x5,x6,x7, 
}; 
var listItems = lst.OrderBy(x => x.Path).ThenBy(x => x.Name); 

foreach(var item in listItems) 
{ 
    Console.WriteLine("{0} ({1})", item.Name, item.Path); 
} 

出力:

test1 (Root) 
test30 (Root) 
test44 (Root) 
test1 (Root/test30) 
test5 (Root/test30) 
SubDir (Root/test44/SubDir) 
SubDir6 (Root/test44/SubDir/SubDir6) 
+0

私が行方不明になったものです! ThenBy()は完璧でした。ありがとうSeany84 –

関連する問題