2016-07-22 124 views
0

是否有更簡單的方法來編寫以下內容? I.E.,沒有lambda。OrderBy無簡單IE枚舉的lambda

var strings = new[] { "Alabama", "Mississippi", "Louisiana" }; 
var ordered = strings.OrderBy(x => x); 

似乎應該是可能的,因爲string實現IEquatable<string>

+0

'list.Sort();'也許? –

+3

爲什麼試圖擺脫它?你只需要積極的心態。這個「(x => x)」實際上是我醉酒時走進滑動玻璃門的一個表情符號。 – Will

+0

OrderBy without lambda不會被** ** **] – Slai

回答

6

IComparable這裏重要超過IEquatable,但它是可能的:

Array.Sort(strings); 

這工作,因爲strings已經是一個數組。既然你問任何的IEnumerable:

var ary = strings.ToArray(); 
Array.Sort(ary); 

注意額外的變量也是本次樣本中很重要,因爲Array.Sort()排序,而不返回的結果通過了實際的對象,並調用.ToArray()創造了一個新的數組,那麼這是扔掉。沒有額外的變量,你就失去了工作。

對於List<T>對象,您也可以使用類似的排序方法。

您也可以使自己的擴展方法爲這樣的:

public static class MyExtensions 
{ 
    public static IOrderedEnumerable<T> Sort(this IEnumerable<T> items) where T : IComparable 
    { 
     return items.OrderBy(i => i); 
    } 
} 

而現在你可以只說:

var ordered = strings.Sort(); 
+2

'Array.Sort(strings.ToArray ())'對我來說似乎很愚蠢。它創建一個數組,將其排序,然後丟棄結果。 –

+0

已經添加到我的答案:) –

+0

是的,但這會創建一個新的陣列。我一直希望有一個更簡潔的擴展方法,我失蹤了,這是其中T簽名'靜態的IEnumerable 訂單(這IEnumerable的枚舉)的:IComparable的;' –