Maison >développement back-end >Golang >Comment gérer efficacement un tableau de chaînes uniques dans Go ?

Comment gérer efficacement un tableau de chaînes uniques dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 06:41:20245parcourir

How to Efficiently Maintain an Array of Unique Strings in Go?

Maintenir des chaînes uniques dans un tableau

Dans le code fourni, votre objectif est de créer un tableau de chaînes uniques. Cependant, les tableaux Go nécessitent des éléments uniques, ce qui rend difficile l'application de l'unicité avec des chaînes ajoutées dynamiquement. Cela pose la question de savoir comment créer une structure de données qui permet des valeurs de chaîne uniques.

Utiliser des cartes comme ensembles

Étant donné que Go ne dispose pas d'un type de données d'ensemble natif, un La carte peut être utilisée efficacement à cette fin. Le caractère unique des clés Maps constitue la base de notre collection de chaînes unique.

Option 1 : Carte avec des valeurs booléennes

Une carte non vide (vrai) peut représenter un ensemble de cordes uniques. Par exemple :

m := make(map[string]bool)

m["aaa"] = true
m["bbb"] = true
m["bbb"] = true  // Ignored as "bbb" already exists
m["ccc"] = true

Cette approche fournit une représentation lisible et intuitive d'un ensemble.

Option 2 : Carte avec des valeurs de structure

Pour utilisation minimale de la mémoire, une carte avec un type de valeur struct{} peut être utilisée. Étant donné que les structures n'occupent aucune mémoire, cette option réduit considérablement la surcharge de mémoire.

m := make(map[string]struct{})

m["aaa"] = struct{}{}
m["bbb"] = struct{}{}
m["bbb"] = struct{}{}  // Ignored as "bbb" already exists
m["ccc"] = struct{}{}

Comment vérifier l'existence

Pour vérifier si un élément est présent dans l'ensemble, vous pouvez exploiter la valeur zéro de bool ou l'idiome virgule-ok avec l'approche struct :

Option 1 :

exists := m["somevalue"]  // If "somevalue" is in the map, exists is true; otherwise, false

Option 2 :

_, exists := m["somevalue"]  // exists is true if "somevalue" is in the map; false otherwise

Conservation de l'ordre

Si vous conservez l'ordre d'insertion est primordial, envisagez d'utiliser une combinaison d'une tranche pour préserver l'ordre et d'une carte pour la validation de l'unicité. Un exemple de fonction d'assistance :

func add(s string) {
    if m[s] {
        return // Already in the map
    }
    a = append(a, s)
    m[s] = true
}

L'utilisation de cette approche vous permet de créer un ensemble ordonné de chaînes uniques.

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!

Déclaration:
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