lua - 在 Lua 中更改表中的值
问题描述
我正在尝试制作一个表格,并希望更改该表格中特定键的值。问题是当我更改密钥时,它确实会更改所有密钥。
function dump(o, nb)
if nb == nil then
nb = 0
end
if type(o) == 'table' then
local s = ''
for i = 1, nb + 1, 1 do
s = s .. " "
end
s = '{\n'
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
for i = 1, nb, 1 do
s = s .. " "
end
s = s .. '['..k..'] = ' .. dump(v, nb + 1) .. ',\n'
end
for i = 1, nb, 1 do
s = s .. " "
end
return s .. '}'
else
return tostring(o)
end
end
Config={}
PlayersStatusTable={}
Config.DefaultStatus = {
hunger = 1000000,
thirst = 1000000,
}
local timeNow = os.clock()
PlayersStatusTable[12] = Config.DefaultStatus
PlayersStatusTable[112] = Config.DefaultStatus
PlayersStatusTable[54] = Config.DefaultStatus
for playerId, details in pairs(PlayersStatusTable) do
print("playerid1",playerId)
print(dump(PlayersStatusTable))
print(dump(PlayersStatusTable[112]))
print(dump(PlayersStatusTable[112].hunger))
PlayersStatusTable[112].hunger = 5
end
输出是这样的:
playerid1 112
{
[112] = {
["thirst"] = 1000000,
["hunger"] = 1000000,
},
[54] = {
["thirst"] = 1000000,
["hunger"] = 1000000,
},
[12] = {
["thirst"] = 1000000,
["hunger"] = 1000000,
},
}
{
["thirst"] = 1000000,
["hunger"] = 1000000,
}
1000000
playerid1 54
{
[112] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
[54] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
[12] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
}
{
["thirst"] = 1000000,
["hunger"] = 5,
}
5
playerid1 12
{
[112] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
[54] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
[12] = {
["thirst"] = 1000000,
["hunger"] = 5,
},
}
{
["thirst"] = 1000000,
["hunger"] = 5,
}
5
我只希望 id 112 的饥饿度为 5。
解决方案
您将同一个表分配给所有 3 个键,因此它们都指向正在更改的同一个表。您需要确保在分配给每个键时创建一个新表。
local function shallowCopy(t)
local result = {}
for k, v in pairs(t) do
result[k] = v
end
return result
end
PlayersStatusTable[12] = shallowCopy(Config.DefaultStatus)
推荐阅读
- restify - AssertionError [ERR_ASSERTION]:需要处理程序(函数)
- java - buffer(int) 和 buffer() 有什么区别?
- css - CSS隐藏所有元素,除了具有特定子元素的元素
- wordpress - 自定义产品类型不允许在 Woocommerce 中更新
- javascript - 在 JQuery 中单击微调器时,OnChange 事件在 Input Type = Number 中不起作用
- angular - 是否对任何非延迟加载的模块使用@Injectable providedIn 与providedIn:“root”相同?
- jqgrid - jqgrid,如何在删除行之前发布字段
- android-studio - Android Studio 上的错误太多了
- powerbi - 如何计算一列中的数字或行数,按 Power BI 中另一列中的值分组
- sql - 根据其他列中的值添加 PostgreSQL 列约束