我正在使用我上一个问题中的随机方法-
An extension method on IEnumerable needed for shuffling
但是,当我使用这些方法中的任何一个来对IEnumerable<IEnumerable<T>>的每个元素进行混洗时,通过调用类似于-
SetOfSets.Select(set => set.Shuffle());所有元素都以相同的顺序进行混洗。如何使其具有随机性?
发布于 2011-05-05 02:22:38
问题是链接问题中的Shuffle扩展方法每次都会实例化一个新的Random对象。由于默认构造函数使用Environment.TickCount作为随机数生成器的种子,而且这一切都发生得非常快,所以所有列表都会获得相同的随机种子。
您需要实例化自己的Random实例,并将其传递给Shuffle重载:
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng)来自this answer。
那么,您的代码将是:
Random myRandom = new Random();
SetOfSets.Select(set => set.Shuffle(myRandom));https://stackoverflow.com/questions/5887972
复制相似问题