Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menggunakan Struktur Ditakrifkan Pengguna sebagai Kekunci dalam Peta Go?

Bagaimanakah Saya Boleh Menggunakan Struktur Ditakrifkan Pengguna sebagai Kekunci dalam Peta Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-10 16:30:18564semak imbas

How Can I Use User-Defined Structs as Keys in Go Maps?

Go Maps dengan Kekunci Ditentukan Pengguna dan Kesaksamaan Tersuai

Melaksanakan peta Go dengan kunci yang ditentukan pengguna melibatkan pematuhan kepada peraturan kesaksamaan tertentu. Malangnya, operasi kesamaan terbina dalam Go tidak boleh disesuaikan untuk kunci peta. Walau bagaimanapun, penyelesaian yang berkesan wujud.

Daripada menggunakan langsung tika struct sebagai kunci, pertimbangkan untuk mendapatkan atribut unik yang boleh berfungsi sebagai kunci intrinsik dan selaras dengan semantik kesamaan yang anda inginkan. Sebagai contoh, anda boleh memperoleh nilai integer atau rentetan yang mewakili identiti tika.

Adalah penting untuk memastikan bahawa perlanggaran utama hanya berlaku apabila nilai yang sepadan mewakili identiti semantik sebenar. Ini memastikan nilai yang boleh ditukar ganti dipetakan dengan betul.

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"

Ingat, pendekatan ini memerlukan kunci tidak berubah. Mengubah suai medan dalam contoh di atas akan membatalkan identiti kunci, menjadikannya tidak sesuai sebagai kunci cincang.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Struktur Ditakrifkan Pengguna sebagai Kekunci 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