2

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

4

5 回答 5

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
于 2012-09-28T12:46:14.450 回答
1

不要认为有任何其他解决方案,然后“手动”迭代,在C# 2.0

创建数组的另一种选择。

您可以创建一个List<>

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

for它比集合更简单或foreach迭代更紧凑。

于 2012-09-28T12:48:17.147 回答
1

当你对它进行排序时,必须阅读整个IEnumerable<>内容,所以没有办法解决这个问题。甚至 Linq to Objects 方法也Sort将整个集合保存在内存中。

List<byte>从 中创建一个IEnumerable<byte>并对其进行排序:

List<byte> list = new List<byte>(indexes);
list.Sort();
于 2012-09-28T12:49:17.323 回答
0

由于您无法真正更改 IEnumerable,因此您将不得不将数据复制到其他地方以对其进行排序。

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

于 2012-09-28T12:45:45.277 回答
0

http://www.codeproject.com/Articles/80546/Comparison-Sorting-Algorithms-in-C-Explained

当我正在寻找解决方案时,这派上了用场

于 2012-09-28T12:47:23.863 回答