【发布时间】:2014-07-03 07:08:08
【问题描述】:
我尝试了两种不同的方法来获取随机数序列:
// (a) works
Random random = new Random();
return Enumerable.Range(0, 20).OrderBy(n => random.Next());
// (b) does not work
return Enumerable.Range(0, 20).OrderBy(n => new Random().Next());
我使用random.Next() 的第一个变体运行良好。
但是我调用new Random().Next() 的变体不返回随机数;而是返回一个从 0 到 20 的数字序列。
现在我的问题是:
- 在 C# 中表示对象
new Random().Next()的第二种类型初始化的术语是什么? - 它与第一个有什么不同,以至于我没有得到期望的输出?
【问题讨论】:
-
顺便说一句。
OrderBy随机数的目的是什么?为什么不直接返回随机数呢?例如,要获取n范围内[a..b)的随机数序列,请执行Enumerable.Range(1, n).Select(_ => random.Next(a, b))。 -
大声笑...说真的,伙计!你在开玩笑,不是吗?获取 0 到 20 之间的随机数然后对它们进行排序有什么意义!!!它甚至有意义吗?
-
@stakx - 您的示例可能会产生重复,这与提供的示例不同。
-
@Leo 不会产生重复,因为来源只是
Enumerable.Range(0,20)。你如何排序并不重要:它不包含重复项。 -
只是要明确一点:在对序列进行洗牌时,您可能需要shuffle,而不是排序算法。