Heim >Backend-Entwicklung >Golang >Wie kann man in Go elegant die Gleichheit von drei Werten prüfen?

Wie kann man in Go elegant die Gleichheit von drei Werten prüfen?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 06:12:29448Durchsuche

How to Elegantly Check Equality of Three Values in Go?

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!

Stellungnahme:
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