2017-05-29 1 views
0

Je n'ai aucune expérience en programmation, donc je ne sais pas ce que je devrais mettre dans le titre.Comment remplacer la valeur d'une "clé" dans une table?

Mais s'il vous plaît aidez-moi, c'est une question très simple, je veux juste changer les navires ['俾斯麦'] pour les navires ['Bismarck'].

Exemple ci-dessous est

Base de données/navire

local ships = { } 

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

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

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

return { ships=ships } 

Puis

spécial Données/navire

local data = require("Database/Ship") 

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

return data 

Edit: Comment puis-je faire savoir h gsub, par exemple d'autres personnes Code:

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

Répondre

0

Alors si je comprends bien votre question: vous avez une des règles pour renommer comme renommage '俾斯麦' à '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 

donc, avec cette solution, vous ca n définissez le nom en utilisant le tableau namingRules. Si vous souhaitez utiliser gsub solution:

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

Merci beaucoup, c'est ce dont j'ai supposé avoir besoin. –

3

Si vous souhaitez accéder aux données data.ships['俾斯麦'] en utilisant 'Bismarck' comme la clé, il suffit de faire

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

Et ne pas oublier de retirer le nom précédent avec 'data.ships [ « 俾斯麦 »] = nil' :) – Vlad

+0

Comment puis-je faire avec gsub, j'ai édité la question. –

1

Pour répondre à votre question éditée:

Il n'a pas de sens d'utiliser gsub ici. Une fois que vous avez stocké quelque chose dans une table avec une certaine clé, elle reste associée à cette clé jusqu'à ce que vous stockiez autre chose dans la même table en utilisant la même clé, ou jusqu'à ce que toute la table soit récupérée parce que vous ne l'utilisez plus .

Par exemple (si vous utilisez quelque chose appelé « tables faibles » alors la partie de la collecte des ordures est plus compliqué, mais vous ne les utilisez pas ici.):

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