Heim > Backend-Entwicklung > Golang > Wie kann ich die Existenz eines Schlüssels in mehreren Go Maps gleichzeitig effizient prüfen?

Wie kann ich die Existenz eines Schlüssels in mehreren Go Maps gleichzeitig effizient prüfen?

Linda Hamilton
Freigeben: 2024-12-13 02:08:09
Original
317 Leute haben es durchsucht

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

Vorhandensein von Schlüsseln in mehreren Karten gleichzeitig prüfen

Frage:

In Go, wann Um zu überprüfen, ob derselbe Schlüssel in mehreren Maps vorhanden ist, besteht ein Ansatz darin, das Flag ok in einer if-Bedingung zu verwenden, wie gezeigt unten:

if v1, ok1 := map1["aaa"]; ok1 {
    ...
}
if v2, ok2 := map2["aaa"]; ok2 {
    ...
}
Nach dem Login kopieren

Es ist jedoch wünschenswert, diese beiden Bedingungen zu einer zusammenzufassen. Kann dies mit einer einzigen if-Anweisung erreicht werden?

Antwort:

Leider ist es nicht möglich, Schlüsselexistenzprüfungen in mehreren Maps mit einer einzigen if-Bedingung durchzuführen. Die Go-Sprachspezifikation schreibt vor, dass Indexausdrücke (z. B. map1["aaa"]) in Zuweisungen oder Initialisierungen der Form v, ok := m[k] einen zusätzlichen untypisierten booleschen Wert (ok) ergeben.

Dies bedeutet, dass die spezielle Form v, ok := m[k] nur verwendet werden kann, wenn nichts anderes zugewiesen wird. Es gibt jedoch einen alternativen Ansatz, wenn der Werttyp der Karten ein Schnittstellentyp ist und der Nullwert nicht verwendet wird. In diesem Fall können Sie eine einfache Tupelzuweisung verwenden:

if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
    fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2)
}
Nach dem Login kopieren

Um diesen Prozess weiter zu vereinfachen, können Sie eine Hilfsfunktion erstellen, die die Schlüsselprüfung durchführt und die Werte und OK-Flags für beide Karten zurückgibt:

func idx(m1, m2 map[string]interface{}, k string) (
    v1, v2 interface{}, ok1, ok2 bool) {

    v1, ok1 = m1[k]
    v2, ok2 = m2[k]
    return
}
Nach dem Login kopieren

Dann können Sie diese Funktion verwenden, um eine Einzelschrittprüfung durchzuführen:

if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
    fmt.Printf("Both maps contain key '%s': %v, %v\n", "aaa", v1, v2)
}
Nach dem Login kopieren

Durch die Verwendung dieser Techniken können Sie kann die Existenz von Schlüsseln in mehreren Karten in Go effizient überprüfen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Existenz eines Schlüssels in mehreren Go Maps gleichzeitig effizient prüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage