Alternativen zum verketteten Vergleich für Wertgleichheit
Beim Vergleich von drei Werten auf Gleichheit führt die Verwendung von if a == b == c zu ein Kompilierungsfehler aufgrund von Typkonflikten. Wenn a == b && a == c eine gültige Alternative ist, kann sie umständlich erscheinen. In diesem Artikel werden mehrere kreative Methoden untersucht, um die Gleichheit von drei Werten elegant zu überprüfen.
Option 1: Karte als Satz
Durch Erstellen einer Karte mit den drei Werten als Schlüssel können wir überprüfen, ob alle Werte gleich sind, indem wir überprüfen, ob die Länge der Karte 1 beträgt. Dieser Ansatz ist flexibel und kann mehr als drei Werte aufnehmen.
<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 { fmt.Println("Map set: all 3 are equal") }</code>
Option 2: Arrays
Arrays in Go sind im Gegensatz zu Slices vergleichbar. Durch den Vergleich von Arrays mit entsprechenden Elementen aus den drei Werten können wir die Gleichheit prüfen.
<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} { fmt.Println("Arrays: all 3 are equal") }</code>
Option 3: Tricky Map
Wir können das Verhalten einer Karte nutzen, um Führen Sie einen einzelnen Vergleich von b == c durch und greifen Sie dann auf den resultierenden Wert für b als Proxy für die Gesamtgleichheit der drei Werte zu.
<code class="go">if map[interface{}]bool{a: b == c}[b] { fmt.Println("Tricky map: all 3 are equal") }</code>
Option 4: Anonyme Strukturen
Strukturwerte in Go sind ebenfalls vergleichbar. Wir können eine anonyme Struktur mit zwei Feldern erstellen, die Strukturen mit den drei Werten vergleichen und auf Gleichheit prüfen.
<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} { fmt.Println("Anon structs: all 3 are equal") }</code>
Option 5: Hilfsfunktion
Wir kann eine Hilfsfunktion definieren, um die Gleichheit einer beliebigen Anzahl von Werten zu überprüfen, indem sie sie iterativ mit einem Startwert vergleicht.
<code class="go">func AllEquals(v ...interface{}) bool { if len(v) > 1 { a := v[0] for _, s := range v { if a != s { return false } } } return true }</code>
Das obige ist der detaillierte Inhalt vonWie kann man in Go elegant die Gleichheit von drei Werten prüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!