您能否建议如何在.NET 3.0(无LINQ)中对IEnumerable<byte> indexes
进行排序?
当然可以确定indexes
长度,创建数组,逐个元素复制,然后调用Array.Sort(array)
。但你可以提出别的建议吗?
答案 0 :(得分:6)
只要您不使用2.0编译器(因此:VS 2008/2010 / 2012),就可以使用LINQBridge,并使用.NET 2.0 / 3.0代码中的LINQ-to-Objects。
另一个懒惰的解决方案是:
List<byte> list = new List<byte>(indexes);
list.Sort();
// list is now a sorted clone of the data
答案 1 :(得分:1)
在C# 2.0
创建数组的另一种选择。
您可以创建List<>
var list = new List<byte>(indexes );
list.Sort(delegate(byte b1, byte b2)
{
//your comparison logic here
});
它比集合上的for
或foreach
迭代更紧凑。
答案 2 :(得分:1)
排序时必须读取整个IEnumerable<>
,因此无法解决此问题。甚至Linq to Objects方法Sort
也将整个集合保存在内存中。
从List<byte>
创建IEnumerable<byte>
并对其进行排序:
List<byte> list = new List<byte>(indexes);
list.Sort();
答案 3 :(得分:0)
由于您无法真正更改IEnumerable,因此您必须将数据复制到其他位置以对其进行排序。
但是,请注意您要对字节进行排序,您可以使用Bucket Sort进行超高效排序。
答案 4 :(得分:0)