1

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

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

如果您想要 0 和指定数字之间的所有数字,此选项提供了一个很好的解决方案:使用 PRNG 而不是随机播放生成随机播放范围

有任何想法吗?

4

1 回答 1

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)在迭代器方法主体周围添加一个。

于 2011-08-04T23:53:51.960 回答