[英]How can I add values to an array stored in a map?
假設我有一個鍵到值數組的映射,並想向這些數組之一添加值:
func addVal<K:Hashable, V>(map: inout [K: [V]], new: (key: K, val: V)) {
if var list = map[new.key] {
list.append(new.val)
} else {
map[new.key] = [new.val]
}
}
該代碼將不起作用:由於數組具有值語義,因此list
是map[new.key]
的副本,並且新值永遠不會插入存儲的數組中。
有沒有一種很好的慣用法呢?
我知道這非常有效:
func addVal<K:Hashable, V>(map: inout [K: [V]], new: (key: K, val: V)) {
if map[new.key] != nil {
map[new.key].append(new.val)
} else {
map[new.key] = [new.val]
}
}
不過,我認為這是一個不錯的解決方法; 我寧願處理可選內容,而無需顯式檢查nil
。
這是安全的,不會擺弄nil
,並且避免了不必要地復制操作數組:
func addVal<K:Hashable, V>(map: inout [K: [V]], new: (key: K, val: V)) {
if let _ = map[new.key] {
map[new.key]!.append(new.val)
} else {
map[new.key] = [new.val]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.