lua - 从随机选择的密钥中选择随机值

问题描述 投票:1回答:2

我试图从表中随机选择一个键,然后随机化该随机键中的值。

示例表

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

所以第四个。

任何帮助都是极好的!

lua lua-table
2个回答
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


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

© www.soinside.com 2019 - 2024. All rights reserved.