2014-07-07 317 views
0

我試圖搜索,但我似乎無法找到我的答案。我認爲答案可能存在,因爲這不是一個不常見的問題。我想說按Item1排序。如果它們相等,排序項目2Lambda表達式,比較item1,如果它們相等比較item2

sorted.Sort((a,b)=>(a.Item1.CompareTo(b.Item1))); 
+0

[使用LINQ Multiple Order By](http:// stac koverflow.com/questions/2318885/multiple-order-by-with-linq) – JohnLBevan

回答

2

當你可以建立一個比較器與List<T>.Sort要做到這一點,它更容易使用LINQ,這是爲這樣的事情內置:

sorted = unsorted.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList(); 

如果你真的想使用排序,你可以在我的MiscUtil項目中使用ProjectionEqualityComparer - 但它不會像LINQ方法那麼好。

1
var sorted = original.OrderBy(c => c.Item1).ThenBy(n => n.Item2).ToList() 

試試這個

+0

你沒有使用結果,所以它不會做任何有用的事情。 –

+0

提交得太快。固定 – TGH

+0

請注意,這不會是'List ',這可能是OP的預期。 –

0

作爲替代LINQ方法,你可以創建一個比較器:

class FrobComparer : IComparer<Frob> 
{ 
    public int Compare(Frob x, Frob y) 
    { 
     int item1Comparison = x.Item1.CompareTo(y.Item1); 

     if (item1Comparison == 0) 
      return x.Item2.CompareTo(y.Item2); 
     return item1Comparison; 
    } 
} 

然後傳遞到Sort(),假設unsortedList<Frob>

var sorted = unsorted.Sort(new FrobComparer());