2017-05-29 18 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 

編集:私はこのウィットを行うにはどうすればよいです時間GSUB、他の人のコードの例:

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

答えて

0

ので、私はあなたの質問を理解している場合:あなたは、CAこのソリューションでそう'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 

に改名'俾斯麦'のように名前を変更するための規則を持っていますn namingRulesテーブルを使用して名前を定義します。

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でこれを行うにはどうすればよい、私はしました:あなたは解決策を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 
関連する問題