Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mendapatkan Kekunci dengan Cekap daripada Peta dalam Go?

Bagaimana untuk Mendapatkan Kekunci dengan Cekap daripada Peta dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-07 04:18:12506semak imbas

How to Efficiently Retrieve Keys from Maps in Go?

Cara Mendapatkan Kekunci Peta dalam Go

Dengan sistem menaip kuat Go, fungsi yang mengambil peta dengan kekunci antara muka jenis{} tidak boleh digunakan pada peta dengan kunci jenis int. Walaupun Go tidak menyokong generik pada masa ini, kami boleh melaksanakan fungsi Kekunci generik dalam beberapa cara:

Pilihan 1: Tukar Jenis Peta

Jika kami ingin mengekalkan jenis peta, kami boleh ubah suai fungsi Keys untuk mengambil argumen map[int]antara muka{} dan secara eksplisit menukar kunci kepada antara muka{}:

func Keys(m map[int]interface{}) []interface{} {
    keys := make([]interface{}, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}

Pilihan 2: Gunakan Refleksi

Sebagai alternatif, kita boleh menggunakan pakej refleksi Go untuk mengakses kekunci peta dan menukarkannya kepada antara muka{}. Walau bagaimanapun, pendekatan ini mungkin mempunyai implikasi prestasi:

func Keys(m interface{}) []interface{} {
    t := reflect.TypeOf(m)
    if t.Kind() != reflect.Map {
        panic("argument must be a map")
    }
    keys := make([]interface{}, 0)
    for _, key := range reflect.ValueOf(m).MapKeys() {
        keys = append(keys, key.Interface())
    }
    return keys
}

Pilihan 3: Tentukan Fungsi Pembantu Generik

Untuk mengelakkan potensi masalah prestasi, kami boleh mentakrifkan fungsi pembantu generik yang menukar peta[ int]antara muka{} ke peta[antara muka{}]antara muka{}:

func convertMap[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1) map[K2]V2 {
    ret := make(map[K2]V2, len(m))
    for k, v := range m {
        ret[k.(K2)] = v.(V2)
    }
    return ret
}

// Keys returns the keys of the provided map.
func Keys[K comparable, V any](m map[K]V) []K {
    keys := make([]K, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    return keys
}

Dengan pembantu ini fungsi, kita boleh menggunakan kod berikut:

m2 := map[int]interface{}{
    2: "string",
    3: "int",
}
convertedMap := convertMap(m2)
result := Keys(convertedMap)
fmt.Println(result)

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kekunci dengan Cekap daripada Peta dalam Go?. 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