Bagaimana untuk Memeriksa Kesaksamaan Antara Tiga Nilai dengan Cekap dalam Go?

DDD
Lepaskan: 2024-11-04 01:55:30
asal
761 orang telah melayarinya

How to Efficiently Check Equality Between Three Values in Go?

Cara Cekap untuk Menyemak Kesamaan Tiga Nilai

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.

Pendekatan Jelas dan Ringkas

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>
Salin selepas log masuk

Kaedah ini memanfaatkan fakta bahawa Go mengembalikan boolean apabila membandingkan dua nilai, memastikan kod yang jelas dan boleh dibaca.

Alternatif untuk Percubaan

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!