Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 按百分比随机_Random_Lua_Logic_Percentage - Fatal编程技术网

Random 按百分比随机

Random 按百分比随机,random,lua,logic,percentage,Random,Lua,Logic,Percentage,给定数组/表中的一组未知值,其中每个值都包含一个数字,我应该如何设置该值,以使数字越大的值被拾取的几率越大 我在Lua中这样做了,我想出了一个效率极低的方法,但由于某种原因,它甚至不起作用: 例如: "module.InsertTokens(5,'a') --The function above would insert the value "a" five times into an array module.RemoveId('a') --this is supposed to remove

给定数组/表中的一组未知值,其中每个值都包含一个数字,我应该如何设置该值,以使数字越大的值被拾取的几率越大

我在Lua中这样做了,我想出了一个效率极低的方法,但由于某种原因,它甚至不起作用:

例如:

"module.InsertTokens(5,'a')
--The function above would insert the value "a" five times into an array
module.RemoveId('a') --this is supposed to remove all values of a
print(#module.Tokens)"
二, --应该是0 --为什么它返回2??D:

是否有某种算法或更好的逻辑我可以使用?
(如果可以的话,还可以指出我对上述代码的错误吗?

只需将值插入表中的次数与其百分比相同即可。例如,如果您希望“a”有95%的几率,“b”有5次,请将a放入表中95次,将b放入表中5次

,您不能修改正在使用
对进行迭代的表。它是未定义的。有关详细信息,请参阅手册条目。若要执行您在此处尝试执行的操作,您可能希望仅使用与id不匹配的值创建一个新表。除非您的表很大,否则这可能是最简单且性能合理的解决方案。像这样?函数module.RemoveId(id)print(#module.Tokens)for index,v in next,module.Tokens do如果v==id,则打印'removing'表。remove(module.Tokens,index)end end end endh等待,没有看到第二条注释这是有效的。它需要以O(n)为单位构建一个表,然后获得恒定时间采样。
function module.InsertTokens(amount, id)
    for i = 1, amount do --amount times
        print'inserting'
        module.Tokens[#module.Tokens+1]=id
    end
end

function module.RemoveId(id)
for index, v in pairs(module.Tokens) do 
    if v == id then
        print'removing' 
        table.remove(module.Tokens, index)
    end 
end
end