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

Bagaimanakah Saya Boleh Melaksanakan Kesaksamaan Tersuai untuk Kunci Peta dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-08 14:32:17326semak imbas

How Can I Implement Custom Equality for Map Keys in Go?

Kunci Peta Tersuai dengan Kesaksamaan Ditakrifkan Pengguna dalam Go

Dalam Go, peta menggunakan semantik setanding yang ketat untuk kunci peta. Ini bermakna pengaturcara tidak boleh melaksanakan fungsi cincang mereka sendiri dan operasi kesamaan untuk kunci peta seperti yang mereka boleh dalam bahasa lain.

Untuk menangani had ini, pertimbangkan pendekatan alternatif. Daripada menggunakan contoh struct sebagai kunci secara langsung, gunakan atribut terbitan struct yang berfungsi sebagai kunci peta yang sesuai dan mematuhi semantik kesamaan yang dikehendaki. Dalam kebanyakan kes, adalah wajar untuk memperoleh integer atau nilai rentetan sebagai kod cincang yang mewakili identiti tika.

Adalah penting untuk memastikan bahawa perlanggaran dalam kod cincang terbitan hanya berlaku apabila ia menunjukkan identiti semantik tulen bagi nilai yang disimpan. Ini bermakna bahawa nilai yang sepadan harus boleh ditukar ganti.

Contohnya:

type Key struct {
  a *int
}

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

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

Walau bagaimanapun, ambil tahu tentang kebimbangan ketidakbolehubah apabila menggunakan pendekatan ini. Jika anda mengubah suai medan a dalam contoh di atas, tika itu tidak lagi boleh berfungsi sebagai kunci cincang kerana identitinya telah berubah.

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