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 件のコメント :
コメントを投稿