如何生成2个数字之间的混洗整数列表?

时间:2011-08-04 23:38:30

标签: c# random shuffle prng

我想创建一个改组的整数,以便:

  1. 鉴于相同的种子,每次洗牌都是相同的
  2. 当我迭代时,洗牌组中的每个数字在重复之前将只使用一次
  3. 适用于大型套装(我希望所有数字都在0到20亿之间)
  4. 将生成一个范围,例如100到150。
  5. 如果你想要一个介于0和指定数字之间的所有数字,这个选项提供了一个很好的解决方案:Generating Shuffled Range Using a PRNG Rather Than Shuffling

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

e.g。 (使用链接问题的代码):

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

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