【发布时间】:2017-01-10 12:27:46
【问题描述】:
假设我有一个键到值数组的映射,并且想要将一个值添加到这些数组之一:
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。
【问题讨论】:
-
使用上下文:grouping arrays.
-
如果您不想复制数组,请参阅stackoverflow.com/questions/41079687/…。根据您的用例,另请参阅stackoverflow.com/questions/31220002/…
标签: arrays swift data-structures hashmap