在 LUA 中获取一组有重复元素的随机数列表

在 LUA 中生成没有重复元素的随机数的例子非常多,只需要使用标准的 math.random(x,y) 就可以得到一个范围内的一组随机整数....

... 但是我发现很难找到一个在一定范围内生成一组随机数,但是允许 x 个相同的数。对于我目前的需求,我可以允许一个可以重复的数,但是未来的项目中,可以将“重复值”设置为任何值会很好。

例如:我想生成一个由10个整数组成的列表,它们的取值范围是1到10,每个值都可以是1到10中的任何一个,但是任何一个数字只能生成并添加到列表中两次。

示例结果:1,1,2,4,5,5,7,7,8,9

在这个示例结果中,math.random() 尝试输出3个或更多的相同数字,但这个代码使其返回并尝试再次生成2个相同的数字。

提前感谢!

点赞
用户9369297
用户9369297

你可以使用“合并技巧”:

  1. 为 5 (10/重复项数量) 个元素创建“唯一”数字数组:1,2,5,7,9。

  2. 重复步骤 #1。

  3. 合并数组。

你可以使用 minValue、maxValue、totalNumber、numberOfDublicates 等参数进行泛化,但需要处理 10/3 问题和 maxValue < totalNumber 的代码稍微多一些。

2018-11-20 06:46:16
用户1260774
用户1260774
  • 在范围内生成一个非随机的顺序数字列表,不能有重复的数字。
  • 将它们添加到一个表格中,但是每个数字添加 X 次,其中 X 是允许的重复总数。因此,我们现在有一个表格,它是每个个体数字所列出的 X 倍长。
  • 打乱表格,或生成一个随机数字列表或两者兼有。
  • 然后简单地使用生成的数字作为“重复”表格的数值键值来从表格中提取数字。
  • 您可以在这些键值上存储任何东西,因此这适用于任何内容,而不仅仅是数字。
2018-11-20 21:40:55