Swiftの辞書は値型だそうです。
辞書の中に辞書や配列をネストして入れている場合に、中身を書き換える方法について調べました。
(もっといい方法があったら教えて欲しいです...)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // 辞書の中の深い部分を書き換える方法 typealias DeepHash = [String: [String: [String]]] func changeDeepHash(_ dict: inout DeepHash) { // Apple のcountを["100", "200", "300"]に変えたい // 上から順に更新したものでアップデートしていく if var apple = dict[ "Apple" ] { if var count = apple[ "count" ] { count.append( "300" ) apple[ "count" ] = count } dict[ "Apple" ] = apple } } let original: DeepHash = [ "Apple" : [ "color" : [ "red" , "green" ], "count" : [ "100" , "200" ]], "Orange" : [ "color" : [ "orange" , "green" ], "count" : [ "10" , "20" ]] ] print(original) var copy = original changeDeepHash(©) print(original) print( copy ) |
辞書から取り出した物が辞書で、その中を書き換えても元の辞書の中身は書き変わりません。
書き換える場合は、更新した物で元の辞書を更新する必要があります。
for inout v in dict みたいな文法がサポートされるまではこんな感じで更新するしかないようです。
より良い方法があれば教えて欲しいです。
0 件のコメント :
コメントを投稿