Fungsi universal untuk menukar Peta kepada Senarai dalam GO

WBOY
Lepaskan: 2024-02-13 20:30:12
ke hadapan
722 orang telah melayarinya

GO 中将 Map 转换为 List 的通用函数

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!

Kandungan soalan

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)
}
Salin selepas log masuk

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
Salin selepas log masuk

Bagaimanakah saya harus menulis fungsi maptolist()?

Ia mesti diambil sebagai input inputmap map[any]anyinputmap 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

Penyelesaian

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
}
Salin selepas log masuk

parameterm必须是map[k]v,其中kcomparable类型,vany类型。返回类型 []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]]
Salin selepas log masuk

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]
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!