IEnumerable<byte> indexes
.NET 3.0 (LINQ なし) でソートする方法の解決策をアドバイスできますか? もちろん、indexes
長さを決定し、配列を作成し、要素ごとにコピーしてから を呼び出すことは可能Array.Sort(array)
です。しかし、他に何か提案できますか?
5 に答える
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.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
コレクション全体をメモリに保持します。
List<byte>
からを作成しIEnumerable<byte>
、並べ替えます。
List<byte> list = new List<byte>(indexes);
list.Sort();
http://www.codeproject.com/Articles/80546/Comparison-Sorting-Algorithms-in-C-Explained
これは、解決策を探していたときに役立ちました
IEnumerable を実際に変更することはできないため、データを別の場所にコピーして並べ替える必要があります。
ただし、バイトをソートしていることに注意してください。バケットソートを使用して、非常に効率的なソートを行うことができます。