Rumah  >  Artikel  >  pembangunan bahagian belakang  >  peta golang untuk dihiris

peta golang untuk dihiris

PHPz
PHPzasal
2023-05-10 10:13:361051semak imbas

Peta dalam bahasa Go ialah jenis pasangan nilai kunci yang tidak tertib, yang boleh mengakses nilai yang sepadan mengikut kekunci. Dalam sesetengah kes, kami perlu menukar data dalam peta kepada jenis hirisan untuk memudahkan operasi lain. Artikel ini memperkenalkan beberapa kaedah menukar peta golang kepada hirisan.

Kaedah 1: Gunakan gelung for untuk merentasi peta

Dengan merentasi peta melalui gelung for, anda boleh menambah pasangan nilai kunci dalam peta pada kepingan satu demi satu. Kod khusus adalah seperti berikut:

package main

import "fmt"

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["one"] = 1
    m["two"] = 2
    m["three"] = 3

    keys := make([]string, 0, len(m))
    values := make([]int, 0, len(m))

    for key, value := range m {
        keys = append(keys, key)
        values = append(values, value)
    }

    fmt.Println(keys)   // [one two three]
    fmt.Println(values) // [1 2 3]
}

Kaedah 2: Gunakan pustaka reflect

reflect ialah perpustakaan pantulan dalam bahasa Go, yang boleh mendapatkan maklumat jenis, kaedah panggilan, akses medan struktur, dsb. . Peta boleh ditukar kepada jenis reflect.Value melalui fungsi reflect.ValueOf(), dan kemudian pasangan nilai kunci boleh diperolehi melalui kaedah reflect.Value. Kod khusus adalah seperti berikut:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["one"] = 1
    m["two"] = 2
    m["three"] = 3

    keys := reflect.ValueOf(m).MapKeys()
    values := make([]int, 0, len(keys))
    for _, key := range keys {
        values = append(values, m[key.String()])
    }

    fmt.Println(keys)   // [one two three]
    fmt.Println(values) // [1 2 3]
}

Kaedah 3: Gunakan github.com/mitchellh/mapstructure library

mapstructure ialah perpustakaan untuk menghurai struktur, yang boleh menghuraikan pasangan nilai kunci dalam petakan ke dalam struktur bidang yang sepadan dalam . Pustaka ini menyediakan fungsi Decode(), yang boleh menghuraikan peta ke dalam sebarang jenis nilai pergi, termasuk jenis kepingan. Kod khusus adalah seperti berikut:

package main

import (
    "fmt"

    "github.com/mitchellh/mapstructure"
)

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["one"] = 1
    m["two"] = 2
    m["three"] = 3

    values := make([]int, 0, len(m))
    err := mapstructure.Decode(m, &values)

    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(values) // [1 2 3]
    }
}

Ringkasan:

Tiga kaedah di atas boleh menukar peta kepada jenis kepingan. Antaranya, kaedah satu mempunyai prestasi yang agak rendah dan sesuai untuk penukaran peta berskala kecil. Walaupun kaedah dua menggunakan perpustakaan refleksi, kecekapannya masih lebih tinggi daripada kaedah satu. Kaedah ketiga ialah menggunakan perpustakaan pihak ketiga, yang mudah dan pantas, serta sesuai untuk situasi di mana data peta agak kompleks. Kita boleh memilih kaedah penukaran yang berbeza mengikut senario tertentu.

Atas ialah kandungan terperinci peta golang untuk dihiris. 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