首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对IEnumerable<string>进行排序

如何对IEnumerable<string>进行排序
EN

Stack Overflow用户
提问于 2010-09-03 03:51:50
回答 3查看 94.6K关注 0票数 109

如何按字母顺序对IEnumerable<string>进行排序。这个是可能的吗?

编辑:我该如何写一个就地解决方案?

EN

回答 3

Stack Overflow用户

发布于 2010-09-03 03:57:35

这是不可能的,但事实并非如此。

基本上,任何排序方法都会将IEnumerable复制到List中,对List进行排序,然后返回排序后的列表,它既是一个IEnumerable,也是一个IList

这意味着您丢失了IEnumerable的“无限连续”属性,但是无论如何您都不能对它进行排序。

票数 12
EN

Stack Overflow用户

发布于 2010-09-03 04:06:19

代码语言:javascript
复制
myEnumerable = myEnumerable.OrderBy(s => s);
票数 8
EN

Stack Overflow用户

发布于 2010-09-03 04:49:22

我们不能总是在适当的地方做,但我们可以检测到它的可能性:

代码语言:javascript
复制
IEnumerable<T> SortInPlaceIfCan(IEnumerable<T> src, IComparer<T> cmp)
{
  List<T> listToSort = (src is List<T>) ? (List<T>)src : new List<T>(src);
  listToSort.Sort(cmp);
  return listToSort;
}
IEnumerable<T> SortInPlaceIfCan(IEnumerable<T> src, Comparison<T> cmp)
{
  return SortInPlaceIfCan(src, new FuncComparer<T>(cmp));
}
IEnumerable<T> SortInPlaceIfCan(IEnumerable<T> src)
{
  return SortInPlaceIfCan(src, Comparer<T>.Default);
}

这使用了以下方便的结构:

代码语言:javascript
复制
internal struct FuncComparer<T> : IComparer<T>
{
  private readonly Comparison<T> _cmp;
  public FuncComparer(Comparison<T> cmp)
  {
      _cmp = cmp;
  }
  public int Compare(T x, T y)
  {
      return _cmp(x, y);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3630687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档