Random 按百分比随机
给定数组/表中的一组未知值,其中每个值都包含一个数字,我应该如何设置该值,以使数字越大的值被拾取的几率越大 我在Lua中这样做了,我想出了一个效率极低的方法,但由于某种原因,它甚至不起作用: 例如: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
"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