在给定键表的情况下,是否有非hacky的方法来更改嵌套表中的值?

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

所以我试图在给定键表的情况下更改嵌套表中的值

示例:

local DATA = {
    Storage = {
        Person_id = {
            Money = 0;
            Inventory = {
                Item1 = 0;
            }
        }
    }
}

local function ChangeData(ID, KeyTable, Value, Operation)
    local StorageValue = DATA.Storage[ID].Data; 
    for _, Key in ipairs(KeyTable) do
        StorageValue = StorageValue[Key];
    end

    if Operation == "+" then
        StorageValue = StorageValue + Value;
    elseif Operation == "=" then
        StorageValue = Value;
    end
end

ChangeData("person_id", {"Money"}, 5, "="};
ChangeData("person_id", {"Inventory", "Item1"}, 5, "="};

这可以成功地从嵌套表中获取值(并更改变量值),但不能更改嵌套表中的值。

...

解决此问题的唯一方法((我真的不愿意想要这样做)是对其进行硬编码。例如:

if Operation == "=" then
   if #KeyTable == 1 then
      DATA.Storage[ID].Data[KeyTable[1]] = Value;
   elseif #KeyTable == 2 then
      DATA.Storage[ID].Data[KeyTable[1]][KeyTable[2]] = Value;
--... and so on

所以我要问的是:给定密钥表的情况下,是否有非hacky的方法来更改嵌套表中的值?

lua lua-table
1个回答
1
投票

您可以使用table.remove删除表的最后一个值,并将其另存为最后一个键。

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