如何按字母顺序对IEnumerable<string>
进行排序。这个是可能的吗?
编辑:我该如何写一个就地解决方案?
发布于 2010-09-03 03:57:35
这是不可能的,但事实并非如此。
基本上,任何排序方法都会将IEnumerable
复制到List
中,对List
进行排序,然后返回排序后的列表,它既是一个IEnumerable
,也是一个IList
。
这意味着您丢失了IEnumerable
的“无限连续”属性,但是无论如何您都不能对它进行排序。
发布于 2010-09-03 04:06:19
myEnumerable = myEnumerable.OrderBy(s => s);
发布于 2010-09-03 04:49:22
我们不能总是在适当的地方做,但我们可以检测到它的可能性:
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);
}
这使用了以下方便的结构:
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);
}
}
https://stackoverflow.com/questions/3630687
复制相似问题