Rumah > Artikel > pembangunan bahagian belakang > Fungsi universal untuk menukar Peta kepada Senarai dalam GO
editor php Strawberry memperkenalkan anda kepada alat praktikal yang dipanggil "Fungsi universal untuk menukar Peta kepada Senarai dalam GO". Fungsi ini boleh membantu anda menukar struktur data peta nilai kunci (Peta) kepada struktur data senarai (Senarai). Melalui fungsi umum ini, anda boleh menukar struktur data kompleks dengan mudah kepada bentuk yang lebih ringkas, meningkatkan kebolehbacaan dan kebolehselenggaraan kod anda. Sama ada anda pernah menghadapi keperluan yang sama dalam pembangunan atau ingin mengetahui lebih banyak teknik tentang penukaran struktur data, fungsi universal ini akan membawa kemudahan dan inspirasi kepada anda. Mari kita terokai alat berguna ini bersama-sama!
Bagaimana untuk menulis fungsi dalam go yang menukar mana-mana peta kepada senarai objek (mengalih keluar kekunci)?
Contohnya:
func maptolist(inputmap map[any]any) any { var resultlist []any for _, obj := range inputmap { resultlist = append(resultlist, obj) } return resultlist } func main() { mymap := make(map[string]string) mymap["a"] = "1" mymap["b"] = "12" l := maptolist(mymap).([]string) fmt.printf("(%v, %t)\n", l, l) }
akan mengeluarkan: ([1 12], []string)
Tetapi saya sentiasa menghadapi masalah jenis dan tidak menemui penyelesaian. Saya mempunyai masalah yang sama menggunakan penegasan atau penukaran jenis.
cannot use myMap (variable of type map[string]string) as map[any]any value in argument to mapToList
Bagaimanakah saya harus menulis fungsi maptolist()?
Ia mesti diambil sebagai input inputmap map[any]any
或 inputmap any
kerana saya mahu menghantar sebarang jenis peta (map[string]customstruct; map[int][]customstruct dsb.)
Kemas kini: Saya menambah fungsi dan butiran lanjut tentang input semasa saya mula-mula menulisnya
Lihat tutorial ini tentang generik atau Spesifikasi Bahasa
any
不是变量类型,它是一个type约束
,可以使用的类型的描述。您需要使用约束 any
Tentukan parameter jenis dan kemudian rujuk jenis generik daripada tandatangan parameter.
// | from this point on, k and v are // | now valid types to use in the function func maptoslice[k comparable, v any](m map[k]v) []v { s := make([]v, 0, len(m)) for _, v := range m { s = append(s, v) } return s }
parameterm
必须是map[k]v
,其中k
是comparable
类型,v
是any
类型。返回类型 []v
akan menjadi kepingan daripada jenis yang sama seperti nilai dalam peta input.
Sila ambil perhatian, any
不能用作映射键的约束,因为并非所有类型都可以用作键,只有 可比较的
taip.
Kemudian, untuk memanggil kaedah, masukkan jenis yang memenuhi kekangan (cth. map[string][]string
), secara pilihan memaparkan parameter jenis secara eksplisit.
m := map[string][]string{ "a": {"b", "c"}, "d": {"e", "f"}, } s := maptoslice(m) // or t := maptoslice[string, []string](m) // [[b c] [e f]]
Dengan bersikap eksplisit tentang jenis, anda boleh mendokumenkan kod anda sendiri dan menangkap sebarang isu jenis yang tidak dijangka. Sebagai contoh, kod berikut akan mengembalikan ralat:
v := mapToSlice[string, []int](m) ... ./main.go:14:33: cannot use m (variable of type map[string][]string) as map[string][]int value in argument to mapToSlice[string, []int]
Atas ialah kandungan terperinci Fungsi universal untuk menukar Peta kepada Senarai dalam GO. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!