Maison > développement back-end > Golang > Comment récupérer efficacement les clés de Maps in Go ?

Comment récupérer efficacement les clés de Maps in Go ?

Susan Sarandon
Libérer: 2024-12-07 04:18:12
original
481 Les gens l'ont consulté

How to Efficiently Retrieve Keys from Maps in Go?

Comment obtenir des clés de carte dans Go

Avec le système de saisie puissant de Go, une fonction qui prend une carte avec des clés de type interface{} ne peut pas être appliquée à une carte avec des clés de type int. Bien que Go ne prenne actuellement pas en charge les génériques, nous pouvons implémenter une fonction Clés génériques de plusieurs manières :

Option 1 : Convertir le type de carte

Si nous souhaitons conserver le type de la carte, nous pouvons modifiez la fonction Keys pour prendre un argument map[int]interface{} et convertir explicitement les clés en interface{} :

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

Option 2 : Utiliser Reflection

Alternativement, nous pouvons utiliser le package de réflexion de Go pour accéder aux clés de la carte et les convertir en interface{}. Cependant, cette approche peut avoir des implications en termes de performances :

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
}
Copier après la connexion

Option 3 : Définir une fonction d'assistance générique

Pour éviter d'éventuels problèmes de performances, nous pouvons définir une fonction d'assistance générique qui convertit une carte[ int]interface{} vers une map[interface{}]interface{} :

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
}
Copier après la connexion

Avec ces fonctions d'assistance, nous pouvons utiliser les éléments suivants code :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal