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