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

我有以下表格

scavenging =
{
  {
    type = "Greenskin|16",
    fast_levelup = 20,        -- 在所需等级后具有75%升级机率的层数
    normal_levelup = 40,      -- 在fast_levelup和所需等级之后具有50%升级机率的层数
    slow_levelup = 40,        -- 具有25%机率的层数
    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

来获取所需的数据。问题是,是否有一种简单的方法可以在不必进行几个for(pairs)的情况下到达 droprates 值?现在,例如,我可以使用:

local founditem = scavenge_meta("Greenskin|16")

这可以工作,然后我可以使用 founditem.fast_levelup 等。我希望可以通过 founditem.drops.items 访问掉落 table,但这不起作用,我需要做 pairs(founditem.drops) 然后 pairs(valuefound.items) /etc.

也许有更好的方法来实现这一点?

点赞
用户7504558
用户7504558

如果你可以改变表格,那么可以这样:

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)

如果不能改变表格,则只能像你之前所做的那样进行搜索。

2020-09-26 07:51:00