Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Kesaksamaan Kunci Tersuai untuk Peta Go?

Bagaimanakah Saya Boleh Melaksanakan Kesaksamaan Kunci Tersuai untuk Peta Go?

Barbara Streisand
Barbara Streisandasal
2025-01-02 21:31:39921semak imbas

How Can I Implement Custom Key Equality for Go Maps?

Kesaksamaan Kunci Tersuai untuk Peta Go

Apabila mencipta peta dalam Go, anda boleh menggunakan sebarang jenis sebagai kunci asalkan ia melaksanakan antara muka yang setanding. Secara lalai, Go menggunakan operator kesamarataan terbina dalam (==) untuk membandingkan kunci. Walau bagaimanapun, mungkin terdapat keadaan di mana anda ingin menentukan kriteria kesaksamaan anda sendiri.

Contoh

Pertimbangkan jenis kunci tersuai berikut:

type Key struct {
    a *int
}

Untuk membandingkan dua contoh Key, anda ingin menggunakan Equal anda sendiri fungsi:

func Equal(x Key, y Key) bool {
    return *x.a == *y.a
}

Penyelesaian

Malangnya, Go tidak membenarkan anda menentukan fungsi pencincangan tersuai atau kesamaan untuk kunci peta. Sebaliknya, anda boleh menggunakan penyelesaian berikut:

  1. Terbitkan Atribut Utama: Daripada menggunakan struct Kunci secara langsung sebagai kunci, terbitkan atribut (cth., integer atau rentetan) yang berfungsi sebagai identiti untuk kunci. Pastikan perlanggaran hanya berlaku untuk kekunci semantik yang sama.
  2. Laksanakan Fungsi Cincang: Cipta kaedah pada Kunci yang mengira atribut terbitan dan mengembalikannya sebagai integer (untuk pencincangan).
func (k *Key) HashKey() int {
    return *(*k).a
}

Contoh Penggunaan

Menggunakan contoh di atas, peta akan menjadi:

k1, k2 := Key{intPtr(1)}, Key{intPtr(2)}
m := map[int]string{}
m[k1.HashKey()] = "one"
m[k2.HashKey()] = "two"

Langkah Berjaga-jaga

Ingat bahawa pendekatan ini bergantung pada kebolehubah daripada atribut kunci terbitan. Jika mana-mana medan dalam struct Kunci berubah, identiti kunci berubah dan ia tidak akan berfungsi seperti yang diharapkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Kesaksamaan Kunci Tersuai untuk Peta Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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