是否有更簡單的方法來編寫以下內容? I.E.,沒有lambda。OrderBy無簡單IE枚舉的lambda
var strings = new[] { "Alabama", "Mississippi", "Louisiana" };
var ordered = strings.OrderBy(x => x);
似乎應該是可能的,因爲string
實現IEquatable<string>
。
是否有更簡單的方法來編寫以下內容? I.E.,沒有lambda。OrderBy無簡單IE枚舉的lambda
var strings = new[] { "Alabama", "Mississippi", "Louisiana" };
var ordered = strings.OrderBy(x => x);
似乎應該是可能的,因爲string
實現IEquatable<string>
。
這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();
'Array.Sort(strings.ToArray ())'對我來說似乎很愚蠢。它創建一個數組,將其排序,然後丟棄結果。 –
已經添加到我的答案:) –
是的,但這會創建一個新的陣列。我一直希望有一個更簡潔的擴展方法,我失蹤了,這是其中T簽名'靜態的IEnumerable
'list.Sort();'也許? –
爲什麼試圖擺脫它?你只需要積極的心態。這個「(x => x)」實際上是我醉酒時走進滑動玻璃門的一個表情符號。 – Will
OrderBy without lambda不會被** ** **] – Slai