首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerable混洗对于集合集合不是随机的

IEnumerable混洗对于集合集合不是随机的
EN

Stack Overflow用户
提问于 2011-05-05 02:12:14
回答 1查看 193关注 0票数 0

我正在使用我上一个问题中的随机方法-

An extension method on IEnumerable needed for shuffling

但是,当我使用这些方法中的任何一个来对IEnumerable<IEnumerable<T>>的每个元素进行混洗时,通过调用类似于-

代码语言:javascript
复制
SetOfSets.Select(set => set.Shuffle());

所有元素都以相同的顺序进行混洗。如何使其具有随机性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-05 02:22:38

问题是链接问题中的Shuffle扩展方法每次都会实例化一个新的Random对象。由于默认构造函数使用Environment.TickCount作为随机数生成器的种子,而且这一切都发生得非常快,所以所有列表都会获得相同的随机种子。

您需要实例化自己的Random实例,并将其传递给Shuffle重载:

代码语言:javascript
复制
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng)

来自this answer

那么,您的代码将是:

代码语言:javascript
复制
Random myRandom = new Random();
SetOfSets.Select(set => set.Shuffle(myRandom));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5887972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档