IEnumerable 对一组集合的洗牌不是随机的
我正在使用上一个问题中的洗牌方法 -
需要 IEnumerable 上的扩展方法 但是当我使用这些方法中的任何一个通过
调用类似的方法来对 IEnumerable
SetOfSets.Select(set => set.Shuffle());
所有元素都以相同的顺序进行洗牌。怎么让它随机呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题在于链接问题中的
Shuffle
扩展方法每次都会实例化一个新的Random
对象。由于默认构造函数使用Environment.TickCount 来为随机数生成器提供种子,并且这一切发生得非常快,因此所有列表都获得相同的随机种子。您需要实例化您自己的
Random
实例并将其传递给Shuffle
重载:来自 这个答案。
那么你的代码将是:
The problem is that the
Shuffle
extension method in the linked question instantiates a newRandom
object each time. Since the default constructor usesEnvironment.TickCount
to seed the random number generator and this all happens very quickly, all the lists get the same random seed.You need to instantiate a
Random
instance of your own and pass it to theShuffle
overload:from this answer.
Your code, then, would be: