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 { ... }
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) }
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 }
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) }
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!