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
Lepaskan: 2024-12-07 04:18:12
asal
481 orang telah melayarinya

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

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

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

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

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!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan