2012-09-28 44 views
2

您能否建议如何在.NET 3.0(无LINQ)中对IEnumerable<byte> indexes进行排序的任何解决方案? 当然,可以确定长度,创建数组,逐个元素复制,然后调用Array.Sort(array)。但也许你可以提出其他建议吗?在没有LINQ的情况下订购IEnumerable

回答

6

只要您不使用2.0编译器(如:VS 2008/2010/2012),您可以使用LINQBridge,并使用.NET 2.0/3.0代码中的LINQ到对象。

其他懒惰的解决方案是:

List<byte> list = new List<byte>(indexes); 
list.Sort(); 
// list is now a sorted clone of the data 
0

由于您无法真正更改IEnumerable,因此您必须将数据复制到别的地方才能对其进行排序。

但是,请注意您正在排序字节,您可以使用Bucket Sort进行超高效排序。

1

不要以为搜索有没有其他解决办法,然后迭代在“手动”中,在C# 2.0

另一种创建数组的选项。

您可以创建一个List<>

var list = new List<byte>(indexes); 
list.Sort(delegate(byte b1, byte b2) 
{ 
     //your comparison logic here 
}); 

它更紧凑然后简单forforeach迭代超过集合。

1

整个IEnumerable<>必须在排序时阅读,所以没有办法解决这个问题。即使Linq to Objects方法Sort也会将整个集合保存在内存中。

创建一个从IEnumerable<byte>一个List<byte>和排序是:

List<byte> list = new List<byte>(indexes); 
list.Sort();