【发布时间】:2012-09-28 12:41:58
【问题描述】:
您能否就如何在 .NET 3.0(无 LINQ)中对 IEnumerable<byte> indexes 进行排序提供任何解决方案?
当然可以确定indexes 的长度,创建数组,逐个元素复制,然后调用Array.Sort(array)。但是您可能还有其他建议吗?
【问题讨论】:
您能否就如何在 .NET 3.0(无 LINQ)中对 IEnumerable<byte> indexes 进行排序提供任何解决方案?
当然可以确定indexes 的长度,创建数组,逐个元素复制,然后调用Array.Sort(array)。但是您可能还有其他建议吗?
【问题讨论】:
只要您不使用 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
【讨论】:
在C# 2.0C# 2.0中,除了“手动”迭代之外,别想有任何其他解决方案
创建数组的另一种选择。
您可以创建List<>
var list = new List<byte>(indexes );
list.Sort(delegate(byte b1, byte b2)
{
//your comparison logic here
});
它比简单的for 或foreach 迭代更紧凑。
【讨论】:
排序时必须读取整个IEnumerable<>,所以没有办法解决这个问题。甚至 Linq to Objects 方法Sort 也将整个集合保存在内存中。
从IEnumerable<byte> 创建一个List<byte> 并对其进行排序:
List<byte> list = new List<byte>(indexes);
list.Sort();
【讨论】:
由于您无法真正更改 IEnumerable,因此您必须将数据复制到其他地方才能对其进行排序。
但是,请注意您正在对字节进行排序,您可以使用 Bucket Sort 进行超高效的排序。
【讨论】:
【讨论】: