我想了解自定義排序以下LINQ查詢的邏輯:LINQ的排序依據邏輯
var random = new Random();
var cnt = Enumerable.Range(0, 10).OrderBy(i => random.NextDouble()).ToList();
什麼是這種對比的內在邏輯,我怎麼做比較random.NextDouble()內使結果列表總是不同的?
我想了解自定義排序以下LINQ查詢的邏輯:LINQ的排序依據邏輯
var random = new Random();
var cnt = Enumerable.Range(0, 10).OrderBy(i => random.NextDouble()).ToList();
什麼是這種對比的內在邏輯,我怎麼做比較random.NextDouble()內使結果列表總是不同的?
它等效於:
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
實現了排序關鍵字,以便對每個元素精確地評估一個排序關鍵字。它是爲了性能和(在你的情況下)的正確性。
謝謝。現在很明顯,每次新的類型{i,random.NextDouble()}正在生成:) – Alex
這是一個用於混洗數組的簡單實現。 random.NextDouble()
每次給你一個隨機數,所以輸出順序是隨機的。
我不知道你的問題是什麼。每個數字最初與一個隨機雙鍵相關聯,然後這些數字將根據其鍵進行排序。由於每次排序順序不同,鍵的選擇也不同。 – Jon