2017-05-29 52 views
0

我没有编程经验,所以我不知道我应该把什么标题。如何替换表中“键”的值?

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

例子如下

数据库/船舶

local ships = { } 

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

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

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

return { ships=ships } 

然后

特殊数据/船舶

local data = require("Database/Ship") 

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

return data 

编辑:我如何做到这一点的智慧^ h GSUB,例如从其他人的代码:

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

回答

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 

所以用这个解决方案,您CA n使用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 
+0

非常感谢,这是我所需要的。 –

3

如果你想使用'Bismarck'关键访问data.ships['俾斯麦']数据,只是做

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

而且不要忘了用'data.ships删除以前的名字[“俾斯麦”] = nil' :) – Vlad

+0

我如何做到这一点与GSUB,我已经编辑了这个问题。 –

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