lua-从随机选择的键中选择随机值
我试图从一个表中随机选择一个键,然后从该随机键中随机选择一个值 示例表lua-从随机选择的键中选择随机值,lua,lua-table,Lua,Lua Table,我试图从一个表中随机选择一个键,然后从该随机键中随机选择一个值 示例表 items = { ["Rock"] = {min = 1, max = 5}, ["Sand"] = {min = 4, max = 12}, ["Glass"] = {min = 20, max = 45}, } 那么这个函数 function printTable() local keys = {} for k,v in pairs(items) do tab
items = {
["Rock"] = {min = 1, max = 5},
["Sand"] = {min = 4, max = 12},
["Glass"] = {min = 20, max = 45},
}
那么这个函数
function printTable()
local keys = {}
for k,v in pairs(items) do
table.insert(keys, k)
local keys = keys[math.random(1, #keys)]
local amount = math.random(v.min,v.max)
print(item, amount)
end
end
它会打印一个随机键及其值,但随后会打印更多的随机键,而这些随机键所对应的值较少
我想做的是,打印其中一个键,然后只打印所述键的值
Sand 6
或
Glass 31
等等,第四
任何帮助都会很棒 因为如果不预定义表的索引或通过循环的索引收集索引,就无法获得表的索引,因此可以创建一个包含每个表的索引的表,然后使用该表随机选择要使用的项
local indexes = {"Rock", "Sand", "Glass"}
将其与printTable
功能一起使用
items = {
["Rock"] = {min = 1, max = 5},
["Sand"] = {min = 4, max = 12},
["Glass"] = {min = 20, max = 45},
}
local indexes = {"Rock", "Sand", "Glass"}
function printTable()
math.randomseed(os.time())
local index = indexes[math.random(1, 3)] -- Pick a random index by number between 1 and 3.
print(index .. " " .. math.random(items[index].min, items[index].max))
end
在这段代码中,您可以看到我如何继续在给定的表中选择随机值。 这将返回您正在查看的输出
math.randomseed(os.time())
local items = {
["Rock"] = {min = 1, max = 5},
["Sand"] = {min = 4, max = 12},
["Glass"] = {min = 20, max = 45},
}
local function chooseRandom(tbl)
-- Insert the keys of the table into an array
local keys = {}
for key, _ in pairs(tbl) do
table.insert(keys, key)
end
-- Get the amount of possible values
local max = #keys
local number = math.random(1, max)
local selectedKey = keys[number]
-- Return the value
return selectedKey, tbl[selectedKey]
end
local key, boundaries = chooseRandom(items)
print(key, math.random(boundaries.min, boundaries.max))
请随意测试它您的示例有错误。打印(
item
,amount),而不是k
。更改后,我得到了您想要的输出。岩石3沙子11玻璃32。另外,您随机检索项目的方法可能不像您希望的那样随机。关于如何使其更随机,有什么建议吗?另外,我的目的是只打印1个键及其指定值。使用math.randomseed()
来生成真正的随机数你应该使用math.randomseed()
Nice来解释真正的随机数-但是怎样才能获得更多的entrophy呢?我是说你的代码,把它放在rvchk.lua中,对于I=0,10 do,do;dofile'rvchk.lua';i=i+1;结束代码>-结果是相同输出的11倍。我的意思是,我们都需要一个更好的解决方案来解决math.randomseed(os.time())