Menentukan Kewujudan Utama Merentasi Pelbagai Peta
Apabila bekerja dengan berbilang peta, selalunya perlu untuk menyemak sama ada kunci khusus wujud dalam semua mereka. Manakala pendekatan berikut adalah biasa:
if v1, ok1 := map1["aaa"]; ok1 { ... } if v2, ok2 := map2["aaa"]; ok2 { ... }
ia melibatkan berbilang pernyataan if. Adakah terdapat cara yang lebih ringkas untuk melaksanakan semakan ini dalam satu syarat?
Percubaan untuk Mengumpul Sintaks
Satu penyelesaian yang mungkin adalah menilai kewujudan utama dalam kedua-dua peta dan kemudian semak persimpangan mereka:
v1, ok1 := map1["aaa"] v2, ok2 := map2["aaa"] if ok1 && ok2 { ... }
Walau bagaimanapun, pendekatan ini memerlukan penugasan dan penyemakan dalam dua berasingan langkah.
Penghadan Pemeriksaan Kunci Syarat Tunggal
Nampaknya, bahasa Go tidak membenarkan untuk menyemak berbilang kewujudan kunci dalam satu syarat if. Menurut spesifikasi Go, ungkapan indeks pada peta menghasilkan nilai boolean tambahan yang menunjukkan kehadiran atau ketiadaan kunci. Sintaks khas ini hanya boleh digunakan dalam tugasan atau permulaan.
Oleh itu, tidak mungkin untuk melakukan semakan kewujudan kunci gabungan hanya menggunakan borang v khas, ok := m[k].
Alternatif untuk Pemeriksaan Kewujudan Utama
Jika jenis nilai peta ialah jenis antara muka dan boleh dijamin tidak mempunyai nilai nil, pendekatan alternatif ialah menggunakan tuple-assignment untuk menyemak kewujudan kunci:
if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil { ... }
Untuk kes yang lebih kompleks, fungsi pembantu boleh dibuat untuk merangkum logik penyemakan kewujudan kunci :
func idx(m1, m2 map[string]interface{}, k string) ( v1, v2 interface{}, ok1, ok2 bool) { v1, ok1 = m1[k] v2, ok2 = m2[k] return } // Usage example: if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 { ... }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyemak Kewujudan Utama Merentasi Pelbagai Peta Go dengan Cekap dalam Keadaan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!