在没有LINQ的情况下订购IEnumerable

时间:2012-09-28 12:41:59

标签: c# .net .net-3.0

您能否建议如何在.NET 3.0(无LINQ)中对IEnumerable<byte> indexes进行排序? 当然可以确定indexes长度,创建数组,逐个元素复制,然后调用Array.Sort(array)。但你可以提出别的建议吗?

5 个答案:

答案 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
});

它比集合上的forforeach迭代更紧凑。

答案 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)