是否有更简单的方法来编写以下内容? 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