IEnumerable shuffling不是随机的集合

时间:2011-05-04 18:12:14

标签: ienumerable shuffle

我正在使用上一个问题中的改组方法 -

An extension method on IEnumerable needed for shuffling

但当我使用这些方法中的任何一种来调用IEnumerable<IEnumerable<T>>的每个元素时,通过调用类似的东西 -

SetOfSets.Select(set => set.Shuffle());

所有元素都以相同的顺序混洗。如何让它随机?

1 个答案:

答案 0 :(得分:1)

问题是链接问题中的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));