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

我尝试从一个表中随机选择一个键,然后随机选择一个值。

示例表格

items = {
    ["石头"] = {min = 1, max = 5},
    ["沙子"] = {min = 4, max = 12},
    ["玻璃"] = {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

它会打印一个随机键及其值,但是然后它会打印更多的随机键,其中少量值与它不匹配。

我要做的就是,打印其中一个键,然后只打印该键的值,因此,

沙子 6

或者

玻璃 31

等等。

任何帮助都会很棒!

点赞
用户8982034
用户8982034

因为没有办法在没有预定义或通过循环索引收集的情况下获取表的索引,所以可以创建一个保存每个表索引的表,然后使用它来随机选择要使用的项。

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)] -- 通过数字在 1 到 3 之间选择一个随机索引。
    print(index .. " " .. math.random(items[index].min, items[index].max))
end

运行代码片段

2019-03-08 22:41:01
用户9137020
用户9137020

在这段代码中,你可以看到我是如何在给定的表格中选择随机值的。这将返回你想要的输出。

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)
    -- 将表格的键插入数组
    local keys = {}

    for key, _ in pairs(tbl) do
        table.insert(keys, key)
    end

    -- 获取可能的值的数量
    local max = #keys
    local number = math.random(1, max)
    local selectedKey = keys[number]

    -- 返回值
    return selectedKey, tbl[selectedKey]
end

local key, boundaries = chooseRandom(items)
print(key, math.random(boundaries.min, boundaries.max))

这里随意测试。

2019-03-15 12:15:59