Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Fungsi universal untuk menukar Peta kepada Senarai dalam GO

Fungsi universal untuk menukar Peta kepada Senarai dalam GO

Feb 13, 2024 pm 08:30 PM
pasangan nilai kunci

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!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perbezaan antara kurungan segi empat sama dan kurungan kerinting dalam Vue Perbezaan antara kurungan segi empat sama dan kurungan kerinting dalam Vue May 02, 2024 pm 10:06 PM

Perbezaan antara kurungan segi empat sama dan kurungan kerinting dalam Vue

Bagaimana untuk menukar tatasusunan hasil pertanyaan MySQL kepada objek? Bagaimana untuk menukar tatasusunan hasil pertanyaan MySQL kepada objek? Apr 29, 2024 pm 01:09 PM

Bagaimana untuk menukar tatasusunan hasil pertanyaan MySQL kepada objek?

Apakah cara biasa untuk menukar tatasusunan kepada objek dalam PHP? Apakah cara biasa untuk menukar tatasusunan kepada objek dalam PHP? Apr 28, 2024 pm 10:54 PM

Apakah cara biasa untuk menukar tatasusunan kepada objek dalam PHP?

Cara menggunakan peta dalam vue Cara menggunakan peta dalam vue May 02, 2024 pm 09:54 PM

Cara menggunakan peta dalam vue

Struktur dan algoritma data Java: penjelasan mendalam Struktur dan algoritma data Java: penjelasan mendalam May 08, 2024 pm 10:12 PM

Struktur dan algoritma data Java: penjelasan mendalam

Peranan kaedah dalam vue Peranan kaedah dalam vue Apr 28, 2024 am 12:00 AM

Peranan kaedah dalam vue

Bagaimana untuk melaksanakan struktur data bebas kunci dalam pengaturcaraan serentak Java? Bagaimana untuk melaksanakan struktur data bebas kunci dalam pengaturcaraan serentak Java? May 02, 2024 am 10:21 AM

Bagaimana untuk melaksanakan struktur data bebas kunci dalam pengaturcaraan serentak Java?

Selepas menggabungkan tatasusunan PHP, bagaimana untuk mengekalkan surat-menyurat nilai kunci? Selepas menggabungkan tatasusunan PHP, bagaimana untuk mengekalkan surat-menyurat nilai kunci? Apr 29, 2024 am 09:21 AM

Selepas menggabungkan tatasusunan PHP, bagaimana untuk mengekalkan surat-menyurat nilai kunci?

See all articles