Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
lua-从随机选择的键中选择随机值_Lua_Lua Table - Fatal编程技术网

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())