- -- @param list_length 生成的数组长度
- -- @param max_random_length 随机数的最大范围
- math.generate = function (list_length, max_random_length)
- local random = {}
- local random_list = {}
- -- 输出随机数表, 通过判断是否存在随机数键避免重复随机数
- for i = 1, list_length do
- local random_number = math.random(1, max_random_length)
- -- 当存在该随机数时, 重复随机至不重复
- while random[random_number] do
- random_number = math.random(1, max_random_length)
- end
- random[random_number] = true
- end
- for key, value in pairs(random) do
- table.insert(random_list, key)
- end
- return random_list
- end
复制代码 在上面的函数math.generate中, 需要传入两个参数: 随机数表的长度list_length和最大随机数max_random_length. 返回1个没有重复值的随机数表.
由于lua的table本质上是键值对动态数组, 所以(line 14)可以直接将随机出来的数字random_number传入key中, 这样就表示这个随机数已经有了, 后续再随机出相同的随机数就会进入(line 11)的循环中去再次随机.
这样做的好处是, 不用和按顺序填充随机数表时, 每随机出一个值就需要和前面的所有值进行遍历查询, 这种随机数生成方式只需要比对一次就知道是否重复, 极大减少了时间复杂度.
最后, 通过pairs迭代器遍历出random所有的键(随机数)就构成了一个新的无重复随机数组random_list.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |