我试图从表中随机选择一个键,然后从该随机键中随机分配一个值。
示例表
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
如此第四。
任何帮助都会很棒!
答案 0 :(得分:1)
由于没有预定义表或通过循环索引收集表的方法就无法获取表的索引,因此您可以创建一个表来保存每个表的索引,然后使用该表随机选择要使用的项目
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()
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
答案 1 :(得分:0)
在这段代码中,您可以看到如何继续在给定表中选择一个随机值。 这将返回您正在寻找的输出。
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))
随时进行测试here