我正在使用上一个问题中的改组方法 -
An extension method on IEnumerable needed for shuffling
但当我使用这些方法中的任何一种来调用IEnumerable<IEnumerable<T>>
的每个元素时,通过调用类似的东西 -
SetOfSets.Select(set => set.Shuffle());
所有元素都以相同的顺序混洗。如何让它随机?
答案 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));