【问题标题】:How to generate a list of shuffled integers between 2 numbers?如何生成 2 个数字之间的混洗整数列表?
【发布时间】:2011-10-20 11:06:15
【问题描述】:

我想创建一组打乱的整数,这样:

  1. 给定相同的种子,每次洗牌都是一样的
  2. 当我迭代时,洗牌集中的每个数字在重复之前都将被使用一次
  3. 适用于大型集合(我想要 0 到 20 亿之间的所有数字)
  4. 将在一个范围内生成,例如,100 到 150。

如果您想要 0 到指定数字之间的所有数字,此选项提供了一个很好的解决方案:Generating Shuffled Range Using a PRNG Rather Than Shuffling

有什么想法吗?

【问题讨论】:

  • 你为什么不直接使用你喜欢的解决方案并将结果改变最小?因此,对于 100–150,这将类似于 GenerateSequence(50).Select(i => i + 100)

标签: c# random shuffle prng


【解决方案1】:

您可以使用与链接问题完全相同的算法。只需生成介于 0 和 upperBound - lowerBound + 1 之间的数字并将 lowerBound 添加到结果中即可。

例如(使用链接问题的代码):

var upper = 5;
var lower = 3;
foreach (int n in GenerateSequence(upper-lower+1))
{
    Console.WriteLine(n+lower);
}

如果您希望序列重复(每次洗牌不同),您可以在迭代器方法主体周围添加while (true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多