簡體   English   中英

如何將值添加到存儲在地圖中的數組中?

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

該代碼將不起作用:由於數組具有值語義,因此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

這是安全的,不會擺弄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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM