Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memeriksa Kesamaan Tiga Nilai dengan Elegan dalam Go?
Alternatif kepada Perbandingan Berantai untuk Kesaksamaan Nilai
Apabila membandingkan tiga nilai untuk kesaksamaan, menggunakan if a == b == c menghasilkan ralat penyusunan kerana jenis tidak sepadan. Walaupun jika a == b && a == c ialah alternatif yang sah, ia boleh kelihatan menyusahkan. Artikel ini meneroka beberapa kaedah kreatif untuk memeriksa kesamaan tiga nilai secara elegan.
Pilihan 1: Peta sebagai Set
Dengan mencipta peta dengan tiga nilai sebagai kunci , kita boleh menyemak sama ada semua nilai adalah sama dengan mengesahkan sama ada panjang peta ialah 1. Pendekatan ini fleksibel dan boleh menampung lebih daripada tiga nilai.
<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 { fmt.Println("Map set: all 3 are equal") }</code>
Pilihan 2: Tatasusunan
Array dalam Go adalah setanding, tidak seperti kepingan. Dengan membandingkan tatasusunan dengan elemen sepadan daripada tiga nilai, kita boleh menyemak kesamaan.
<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} { fmt.Println("Arrays: all 3 are equal") }</code>
Pilihan 3: Peta Rumit
Kita boleh memanfaatkan gelagat peta untuk lakukan satu perbandingan b == c dan kemudian akses nilai yang terhasil untuk b sebagai proksi untuk kesamaan keseluruhan tiga nilai.
<code class="go">if map[interface{}]bool{a: b == c}[b] { fmt.Println("Tricky map: all 3 are equal") }</code>
Pilihan 4: Struktur Tanpa Nama
Nilai struktur dalam Go juga boleh dibandingkan. Kami boleh mencipta struct tanpa nama dengan dua medan, membandingkan struct yang mengandungi tiga nilai dan menyemak kesamaan.
<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>
Pilihan 5: Fungsi Pembantu
Kami boleh mentakrifkan fungsi pembantu untuk menyemak kesamaan bilangan nilai sewenang-wenangnya dengan membandingkannya secara berulang kepada nilai benih.
<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>
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa Kesamaan Tiga Nilai dengan Elegan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!