Maison > développement back-end > Golang > Existe-t-il un moyen plus efficace de récupérer des tranches de valeur de carte dans Go ?

Existe-t-il un moyen plus efficace de récupérer des tranches de valeur de carte dans Go ?

DDD
Libérer: 2024-11-29 20:52:12
original
815 Les gens l'ont consulté

Is There a More Efficient Way to Retrieve Map Value Slices in Go?

Optimisation de la récupération des tranches de valeurs de carte dans Go

Dans Go, obtenir une tranche de valeurs à partir d'une carte peut sembler simple, mais existe-t-il un approche plus efficace que l'itération et l'affectation manuelles présentées ci-dessous ?

package main

import (
    "fmt"
)

func main() {
    m := make(map[int]string)

    m[1] = "a"
    m[2] = "b"
    m[3] = "c"
    m[4] = "d"

    // Manual iteration with pre-allocated slice
    v := make([]string, len(m), len(m))
    idx := 0
    for _, value := range m {
        v[idx] = value
        idx++
    }

    fmt.Println(v)
}
Copier après la connexion

Fonctionnalités cartographiques intégrées et externes Fonctions

L'exemple fourni est la méthode standard pour convertir les valeurs d'une carte en tranche. Go n'offre aucune fonction intégrée spécialement conçue pour cette tâche. Les packages externes peuvent fournir des fonctionnalités supplémentaires, mais ils nécessitent des importations explicites et peuvent ne pas être aussi efficaces que l'approche manuelle.

Implémentation alternative avec Append

Alors que l'approche d'itération manuelle est efficace, il y a une optimisation subtile qui peut être faite. Au lieu d'attribuer des valeurs à des indices spécifiques, la fonction append peut être utilisée pour étendre dynamiquement la tranche :

v := make([]string, 0, len(m))

for _, value := range m {
    v = append(v, value)
}
Copier après la connexion

Dans ce code modifié, la capacité de la tranche v est initialisée à la longueur de la carte m. Cela garantit que l'ajout n'a pas besoin d'allouer de nouvelle mémoire pendant la boucle, ce qui entraîne une exécution légèrement plus rapide.

Conclusion

L'approche d'itération et d'affectation manuelle reste la plus efficace. méthode pour convertir les valeurs d’une carte en tranche dans Go. Cependant, l'implémentation alternative avec append offre une légère amélioration des performances en réduisant les allocations de mémoire inutiles.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal