4

次の LINQ クエリのカスタム並べ替えロジックを理解しようとしています。

 var random = new Random();
 var cnt = Enumerable.Range(0, 10).OrderBy(i => random.NextDouble()).ToList();

そのような比較の内部ロジックとは何ですか?また、結果リストを常に異なるものにする内部で random.NextDouble() とどのように比較しますか?

4

2 に答える 2

8

これは以下と同等です:

var cnt =
Enumerable.Range(0, 10)
.Select(i => new { i, rand = random.NextDouble() }) //"weave" the random temporary
.OrderBy(x => x.rand) //sort
.Select(x => x.i) //remove it
.ToList();

ランダム値は論理的にリストの一部になります。

実装の詳細 (.NET 2.0 から 4.5 の時点) として、OrderBy各要素に対して 1 つだけ評価されるように並べ替えキーを具体化します。これは、パフォーマンスと(あなたの場合は)正確さのために行われます。

于 2013-01-23T11:15:19.390 に答える
4

これは、配列をシャッフルするための単純な実装です。random.NextDouble()毎回乱数を与えるので、出力シーケンスの順序はランダムです。

于 2013-01-23T11:15:06.133 に答える