Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memeriksa Kesaksamaan Antara Tiga Nilai dengan Cekap dalam Go?
In Go, membandingkan berbilang pembolehubah untuk kesaksamaan boleh menjadi satu cabaran. Walaupun pendekatan mudah if a == b == c mengakibatkan ralat penyusunan, terdapat beberapa kaedah alternatif yang menawarkan penyelesaian yang elegan dan cekap.
Yang disyorkan dan cara paling ringkas untuk menentukan sama ada tiga nilai adalah sama ialah:
<code class="go">if a == b && a == c { fmt.Println("All 3 are equal") }</code>
Kaedah ini memanfaatkan fakta bahawa Go mengembalikan boolean apabila membandingkan dua nilai, memastikan kod yang jelas dan boleh dibaca.
Walaupun penyelesaian di atas adalah optimum, terdapat pelbagai pilihan kreatif yang boleh diterokai untuk percubaan:
Peta sebagai Set:
<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 { fmt.Println("Via a map set: all 3 are equal") }</code>
Konsep di sebalik kaedah ini adalah untuk menambah nilai sebagai kunci pada peta, dan jika semuanya sama, peta mengandungi hanya satu kunci, menghasilkan panjang 1.
Tatasusunan:
<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} { fmt.Println("Via arrays: all 3 are equal") }</code>
Array sememangnya boleh dibandingkan, membolehkan kita membandingkan tiga nilai menggunakan ==. Pendekatan ini, walau bagaimanapun, hanya sesuai untuk membandingkan bilangan nilai tertentu.
Peta Rumit:
<code class="go">if map[interface{}]bool{a: b == c}[b] { fmt.Println("Via a tricky map: all 3 are equal") }</code>
Kaedah ini menggunakan peta untuk menetapkan hasil b == c ke kunci, dan kemudian mengakses nilai yang dikaitkan dengan kunci yang sama. Jika a == b, hasil b == c dikembalikan, menunjukkan kesaksamaan.
Struktur Tanpa Nama:
<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} { fmt.Println("Via anonymous structs: all 3 are equal") }</code>
Struktur bersarang adalah setanding, membenarkan kami untuk membandingkan tiga nilai dengan sintaks ringkas.
Slices:
<code class="go">if reflect.DeepEqual([]interface{}{a, b}, []interface{}{b, c}) { fmt.Println("Via slices: all 3 are equal") }</code>
Walaupun kepingan itu sendiri tidak dapat dibandingkan, fungsi reflect.DeepEqual() boleh menentukan kesamaan mereka , membolehkan kami membandingkan kandungannya.
Fungsi Pembantu:
<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>
Fungsi boleh guna semula ini memudahkan perbandingan berbilang nilai dengan menyemak kesamaan secara berulang dan mengembalikan hasil boolean . Ia boleh digunakan dengan sebarang bilangan pembolehubah.
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa Kesaksamaan Antara Tiga Nilai dengan Cekap dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!