如何替换"键"的值在桌子上?

时间:2017-05-29 13:10:38

标签: lua lua-table

我没有编程经验,所以我不知道应该在标题中添加什么。

但请帮助我,这是一件非常简单的事情,我只想将船只['俾斯麦']改为船只['俾斯麦']。

示例如下

数据库/船舶

local ships = { }

----------------------------------------------

ships['俾斯麦'] = {
    index=1, country='Germany', class='Bismarck-class'
}

----------------------------------------------

return { ships=ships }

然后

特殊数据/发货

local data = require("Database/Ship")

data.ships['俾斯麦'] = 'Bismarck'

return data

编辑:如何使用gsub执行此操作,例如来自其他人的代码:

local function replaceShipName(name)
    name = name:gsub('俾斯麦', 'Bismarck')
    name= name:gsub('提尔比茨', 'Tirpitz')
    return name
end

3 个答案:

答案 0 :(得分:3)

如果您想使用data.ships['俾斯麦']作为密钥访问'Bismarck'中的数据,请执行

data.ships['Bismarck'] = data.ships['俾斯麦']

答案 1 :(得分:1)

回答您编辑过的问题:

在这里使用gsub没有意义。一旦您将某些内容存储在具有某个键的表中,它将保持与该键相关联,直到您使用完全相同的键将其他内容存储在同一个表中,或者直到整个表因为您未使用而被垃圾收集它了。

(如果你正在使用名为"弱表"那么垃圾收集部分会变得更复杂,但你在这里没有使用它们。)

例如:

local t = {}

t["a"] = "A value"
print(t["a"]) -- "A value"
print(t["b"]) -- nil

t["b"] = t["a"]
print(t["a"]) -- "A value"
print(t["b"]) -- "A value"

t["a"] = nil
print(t["a"]) -- nil
print(t["b"]) -- "A value"

t = nil -- You can't access the table now, so it will be garbage collected at some point

答案 2 :(得分:0)

因此,如果我理解您的问题:您有重命名规则,例如将'俾斯麦'重命名为'Bismarck'

local namingRules = {
    '俾斯麦' = 'Bismarck',
    '提尔比茨' = 'Tirpitz'
}

--do renaming for all data
local shipsData = data.ships
for key, value in pairs (shipsData) do
  local newKey = namingRules[key]
  if (newKey  ~= nil) then
    --if data should be renamed
    shipsData[newKey] = shipsData[key]
    shipsData[key] = nil
  end
end

因此,使用此解决方案,您可以使用namingRules表定义命名。如果你想使用gsub解决方案:

local shipsData = data.ships
for key, value in pairs (shipsData) do
  local newKey = replaceShipName(key) -- this is your replaceShipName function
  if (newKey ~= nil and newKey ~= key) then
    shipsData[newKey] = shipsData[key]
    shipsData[key] = nil
  end
end