[Swift] ネストした辞書の中身を書き換える

Swiftの辞書は値型だそうです。 辞書の中に辞書や配列をネストして入れている場合に、中身を書き換える方法について調べました。 (もっといい方法があったら教えて欲しいです...) ```objc `gutter:true; // 辞書の中の深い部分を書き換える方法 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 件のコメント :

コメントを投稿