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

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

これは、解決策を探していたときに役立ちました

于 2012-09-28T12:47:23.863 に答える
0

IEnumerable を実際に変更することはできないため、データを別の場所にコピーして並べ替える必要があります。

ただし、バイトをソートしていることに注意してください。バケットソートを使用して、非常に効率的なソートを行うことができます。

于 2012-09-28T12:45:45.277 に答える