我想了解自定义排序以下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