怎样在表格中替换“key”的值?

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

但是请帮我,这是一个非常简单的问题,我只想将 ships['俾斯麦'] 更改为 ships['Bismarck']。

以下是一个示例

Database/Ship

local ships = { }

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

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

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

return { ships=ships }

然后

Special Data/Ship

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
点赞
用户107090
用户107090

如果你想要用 'Bismarck' 作为键来访问 data.ships['俾斯麦'] 中的数据,只需要执行下列代码:

data.ships['Bismarck'] = data.ships['俾斯麦']
2017-05-29 13:27:33
用户5287638
用户5287638

回答你的修改后的问题:

在这里使用 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 -- 现在您无法访问表,因此它将在某个时候被垃圾收集
2017-05-29 23:54:17
用户5331361
用户5331361

所以如果我理解你的问题:你有一个重命名规则,比如将 '俾斯麦' 重命名为 'Bismarck'

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

--对所有数据进行重命名
local shipsData = data.ships
for key, value in pairs (shipsData) do
  local newKey = namingRules[key]
  if (newKey  ~= nil) then
    --如果数据需要重命名
    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) -- 这是您的 replaceShipName 函数
  if (newKey ~= nil and newKey ~= key) then
    shipsData[newKey] = shipsData[key]
    shipsData[key] = nil
  end
end
2017-05-30 10:58:42