lua-从随机选择的键中选择随机值

时间:2019-03-08 18:38:39

标签: 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
        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

如此第四。

任何帮助都会很棒!

2 个答案:

答案 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

Run Code Snippet

答案 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