2013-01-23 119 views
4

我想了解自定義排序以下LINQ查詢的邏輯:LINQ的排序依據邏輯

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

什麼是這種對比的內在邏輯,我怎麼做比較random.NextDouble()內使結果列表總是不同的?

+1

我不知道你的問題是什麼。每個數字最初與一個隨機雙鍵相關聯,然後這些數字將根據其鍵進行排序。由於每次排序順序不同,鍵的選擇也不同。 – Jon

回答

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實現了排序關鍵字,以便對每個元素精確地評估一個排序關鍵字。它是爲了性能和(在你的情況下)的正確性。

+0

謝謝。現在很明顯,每次新的類型{i,random.NextDouble()}正在生成:) – Alex

4

這是一個用於混洗數組的簡單實現。 random.NextDouble()每次給你一個隨機數,所以輸出順序是隨機的。