【问题标题】:Linq order IEnumerable (by the enumerated elements themselves)Linq order IEnumerable(由枚举元素本身)
【发布时间】:2017-11-17 10:51:21
【问题描述】:

这似乎是一个显而易见的问题,并且可能会有关于此主题的先前问题,请指出并在必要时关闭,因为我找不到它们。

是否有任何 Linq 扩展方法可以通过元素本身返回有序序列?我知道可以通过以下方式实现:

IEnumerable<int> myIntegers = new int[]{4, 6, 34, 987, -13};
IEnumerable<int> myOrderedIntegers = myIntegers.OrderBy(i => i);

我不喜欢这样,这样一个简单的操作似乎太冗长了。我知道我也可以这样做:

List<int> myOtherOrderedIntegers = myIntegers.ToList();
myOtherOrderedIntegers.Sort();

但是呃...再见延迟评估,甚至更冗长。我可以编写我的扩展方法,例如...

public static IEnumerable<T> Order<T>(this IEnumerable<T> elements) => elements.OrderBy(e => e);
public static IEnumerable<T> OrderDescending<T>(this IEnumerable<T> elements) => elements.OrderByDescending(e => e);

是否已经有任何Linq扩展方法可以实现这个简单的操作?我觉得它还没有实现很奇怪。

提前致谢。

【问题讨论】:

  • 不,没有。 OrderBy(i =&gt; i) 对你来说真的那么冗长吗?
  • 为什么你觉得IEnumerable&lt;int&gt; myOrderedIntegers = myIntegers.OrderBy(i =&gt; i); 太冗长了?
  • 对于复杂类型的排序列表,您的扩展方法将无法正常工作(除非您的类型实现 IComparable&lt;T&gt;
  • 好吧,这并不是一个真正的问题,我只是认为如果存在这样的方法会更清楚(这种情况下的 lambda 对我来说似乎没有必要)。感谢您的回答,请随时正确回答,我会投票并选择。
  • @DanielGarcíaRubio 如果您认为扩展方法主要用于支持查询语法,那么 lambda 是有意义的,即使它是单列(即 self )。像Order() 这样的东西意义不大,因为查询语法永远不会用到它。人们创建了许多额外的扩展,其中一个流行的是 MoreLINQ。

标签: .net linq sorting


【解决方案1】:

还有比myIntegers.OrderBy(i =&gt; i) 更简洁的方法吗?喜欢myIntegers.Order()?不,那里没有。如果您愿意,您可以自己编写它们,您已经粘贴了代码。您将不得不忍受源代码中 8 字节的浪费空间。

【讨论】:

  • 显然这是一个方法 Sort(),Asker 只是输入了它。他只需要把它放在某个公共图书馆里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多