如何将值添加到存储在地图中的数组?

时间:2017-01-10 12:27:47

标签: arrays swift data-structures hashmap

假设我有一个值数组的键映射,并希望为其中一个数组添加一个值:

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]
    }
}

此代码不起作用:由于数组具有值语义,listmap[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

1 个答案:

答案 0 :(得分:1)

这是安全的,不会弄乱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]
    }
}