【问题标题】:IEnumerable shuffling not random for set of setIEnumerable shuffle 不是随机的集合
【发布时间】:2011-08-18 18:44:25
【问题描述】:

我正在使用上一个问题中的洗牌方法-

An extension method on IEnumerable needed for shuffling

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

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

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

【问题讨论】:

    标签: ienumerable shuffle


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-09
      • 2011-08-07
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多