首页 > 解决方案 > 在 LUA 中获取范围之间的随机数列表,但每个数字允许 x 组重复项

问题描述

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

...但我无法在一个范围之间找到一组随机数,但允许 x 数量的重复项。对于我的迫切需要,我可以允许一组重复项,但是如果有代码可以为未来的项目设置“重复值”,那就太好了。

示例:我想生成 1-10 之间的 10 个整数的列表...每个值可以是 1-10 之间的任何值,但任何一个数字只能生成并添加到列表中两次。

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

在这个例子中,结果 math.random() 试图吐出 3 个或更多相同的数字,但如果它已经产生了 2 个相同的数字,代码会让它返回并重试。

提前致谢!

标签: lua

解决方案


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

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

  2. 重复 #1

  3. 合并数组。

您可以使用 minValue、maxValue、totalNumber、numberOfDublicates 的参数对其进行概括,但需要更多代码来处理 10/3 问题和 maxValue < totalNumber。


推荐阅读