Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Melaksanakan Perbandingan Kunci Tersuai dalam Peta Go?

Bagaimanakah Saya Boleh Melaksanakan Perbandingan Kunci Tersuai dalam Peta Go?

Barbara Streisand
Barbara Streisandasal
2024-12-16 06:11:16700semak imbas

How Can I Implement Custom Key Comparison in Go Maps?

Perbandingan Kunci Tersuai dalam Peta Go

Dalam Go, peta memerlukan kunci yang setanding, tetapi kadangkala operasi kesaksamaan tersuai diingini. Senario ini timbul apabila struktur data tersuai, seperti struktur yang ditentukan pengguna, digunakan sebagai kunci peta.

Untuk memintas pengehadan ini, penyelesaian melibatkan memperoleh atribut berasingan daripada struct yang berfungsi sebagai peta kunci. Atribut terbitan ini harus mempunyai semantik kesamaan yang diingini dan harus boleh digunakan secara intrinsik sebagai kunci.

Pertimbangkan contoh berikut:

type Key struct {
    a *int
}

func (k *Key) HashKey() int {
    return *k.a
}

Dalam contoh ini, kaedah HashKey memperoleh nilai integer yang mewakili identiti Kunci. Peta kemudiannya boleh dibina menggunakan atribut terbitan ini:

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

fmt.Println(m) // Outputs: map[1:one 2:two]

Perhatikan bahawa perbandingan utama bergantung semata-mata pada kaedah HashKey(), membenarkan semantik kesaksamaan tersuai.

Ketidakbolehubah Pertimbangan

Walau bagaimanapun, kebolehubahan adalah penting apabila menggunakan ini pendekatan. Jika medan struct asal diubah suai, tika itu tidak lagi boleh digunakan sebagai kunci peta kerana identitinya telah berubah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Perbandingan Kunci Tersuai dalam 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