首頁 >後端開發 >Golang >如何同時有效率地檢查多個Go Map中某個key是否存在?

如何同時有效率地檢查多個Go Map中某個key是否存在?

Linda Hamilton
Linda Hamilton原創
2024-12-13 02:08:09344瀏覽

How Can I Efficiently Check for the Existence of a Key in Multiple Go Maps Simultaneously?

同時檢查多個映射中的鍵是否存在

問題:

問題:
if v1, ok1 := map1["aaa"]; ok1 {
    ...
}
if v2, ok2 := map2["aaa"]; ok2 {
    ...
}

在Go中,什麼時候檢查多個映射中是否存在相同的鍵,一種方法是在if 中使用ok標誌條件,如下:

但是,最好將這兩個條件濃縮為一個。這可以透過單一 if 語句來實現嗎?

答案:

if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
    fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2)
}
不幸的是,不可能使用單一 if 條件在多個映射中執行鍵存在性檢查。 Go 語言規範要求 v, ok := m[k] 形式的賦值或初始化中的索引表達式(例如 map1["aaa"])產生一個額外的無類型布林值 (ok)。

這表示特殊的 v, ok := m[k] 形式只能在沒有分配任何其他內容時使用。但是,如果映射的值類型是介面類型並且不使用 nil 值,則還有另一種方法。在這種情況下,您可以使用簡單的元組分配:
func idx(m1, m2 map[string]interface{}, k string) (
    v1, v2 interface{}, ok1, ok2 bool) {

    v1, ok1 = m1[k]
    v2, ok2 = m2[k]
    return
}

要進一步簡化此過程,您可以建立一個輔助函數來執行鍵檢查並傳回兩個映射的值和ok 標誌:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
    fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2)
}

然後,您可以使用此函數進行單步檢查:利用這些技術,你可以有效地檢查Go 中多個映射中的鍵是否存在。

以上是如何同時有效率地檢查多個Go Map中某個key是否存在?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn