Lua 在给定一个键表的嵌套表中,是否有一种非黑客方式来更改值?
所以我试图在给定键表的嵌套表中更改一个值 例如:Lua 在给定一个键表的嵌套表中,是否有一种非黑客方式来更改值?,lua,lua-table,Lua,Lua Table,所以我试图在给定键表的嵌套表中更改一个值 例如: 本地数据={ 存储={ 个人识别码={ 货币=0; 存货={ 第1项=0; } } } } 本地函数ChangeData(ID、键表、值、操作) 本地存储值=数据。存储[ID]。数据; 对于u,输入IPAIR(KeyTable)do StorageValue=StorageValue[键]; 结束 如果操作==“+”则 StorageValue=StorageValue+Value; elseif操作==“=”然后 储存价值=价值; 结束 结束
本地数据={
存储={
个人识别码={
货币=0;
存货={
第1项=0;
}
}
}
}
本地函数ChangeData(ID、键表、值、操作)
本地存储值=数据。存储[ID]。数据;
对于u,输入IPAIR(KeyTable)do
StorageValue=StorageValue[键];
结束
如果操作==“+”则
StorageValue=StorageValue+Value;
elseif操作==“=”然后
储存价值=价值;
结束
结束
ChangeData(“person_id”,{“Money”},5,=”};
ChangeData(“person_id”,{“Inventory”,“Item1”},5,=”};
这可以成功地从嵌套表中获取值(并更改变量值),但不会更改嵌套表中的值
解决这个问题的唯一方法(我真的不想这么做)是硬编码。
例:
如果操作==”则
如果#KeyTable==1,则
DATA.Storage[ID].DATA[KeyTable[1]]=值;
elseif#KeyTable==2那么
DATA.Storage[ID].DATA[KeyTable[1]][KeyTable[2]]=Value;
--……等等
因此,我要问的是:有没有一种非黑客方法可以在给定键表的嵌套表中更改值?您可以使用
表删除表的最后一个值。删除,并将其另存为最后一个键
然后您可以按原样使用代码,只需将最后一个键索引添加到操作if语句体中
local DATA = {
Storage = {
Person_id = {
Money = 0,
Inventory = {
Item1 = 5
}
}
}
}
local function ChangeData(ID, KeyTable, Value, Operation)
local StorageValue = DATA.Storage[ID]
local LastKey = table.remove(KeyTable)
for i, Key in ipairs(KeyTable) do
StorageValue = StorageValue[Key]
end
if Operation == "+" then
StorageValue[LastKey] = StorageValue[LastKey] + Value
elseif Operation == "=" then
StorageValue[LastKey] = Value
end
end
ChangeData("Person_id", {"Money"}, 5, "=")
ChangeData("Person_id", {"Inventory", "Item1"}, 5, "+")
print(DATA.Storage.Person_id.Money)
print(DATA.Storage.Person_id.Inventory.Item1)
此外,如Egor Skriptunoff在评论中所述,确保将next,KeyTable
更改为ipairs(KeyTable)
以确保您的密钥顺序得到保留。i,key in next,KeyTable do的中的密钥顺序非常重要,因此使用对/next
是有风险的。@EgorSkriptunoff哦,你说得对,我在OP的代码中遗漏了这一点,我将其更改为ipairs
。谢谢