LUA 和 table 数据 - 在嵌套循环中查找数据

LUA and table data - finding data in a nested loop

我有以下table

scavenging = 
{
  {
    type = "Greenskin|16",
    fast_levelup = 20,        --Number of levels with 75% chance to level up after required level
    normal_levelup = 40,      --Number of levels with 50% chance to level up after fast_levelup + required level
    slow_levelup = 40,        --Number of levels with 25% chance
    drops =                   --Drops
    {
      {items = {"Linen", "Bolt of Linen", "Coarse Thread", "Feather", "Cotton"}, droprates = {60, 10, 10, 10, 2}},
    },
  }, 
}

这是一系列中的一个数据值。我用

function scavenge_meta(scavenge_name)
    for _, meta in pairs(scavenging) do
        if string.match(meta.type, scavenge_name) then
            return meta
        end
    end
end

拉取需要的数据。问题是,是否有一种简单的方法可以在无需为(对)做一些操作的情况下获得掉率值?例如,现在我可以使用:

local founditem = scavenge_meta("Greenskin|16")

这行得通,然后我可以使用 founditem.fast_levelup 等。例如,我希望使用 founditem.drops.items 访问掉落 table,但这行不通,我需要做一个 pairs(founditem.drops) 然后 pairs(valuefound.items) /etc.

也许有更好的方法?

如果您可以更改 table 则执行:

scavenging = 
{
 ["Greenskin|16"] = {
    type = "Greenskin|16",
    fast_levelup = 20,        
    normal_levelup = 40,      
    slow_levelup = 40,        
    drops =          
    {
      {items = {"Linen", "Bolt of Linen", "Coarse Thread", "Feather", "Cotton"}, droprates = {60, 10, 10, 10, 2}},
    },
  }, 
}

直接通过索引获取数据

print(scavenging["Greenskin|16"].fast_levelup)

否则,只需像您一样搜索即可。