Maison > développement back-end > Golang > le corps du texte

Comment implémenter set dans Golang

PHPz
Libérer: 2023-04-14 09:18:43
original
1034 Les gens l'ont consulté

Golang est un langage de programmation orienté objet à typage statique, à haute concurrence, et c'est également l'un des langages qui sont devenus de plus en plus populaires ces dernières années. Dans Golang, bien qu'il n'y ait pas de type Set, nous pouvons facilement implémenter la fonction Set via des structures de données de base telles que slice et map. Cet article explique comment implémenter Set avec Golang.

Définition de Set

Set est une structure de données non ordonnée et non répétitive. Elle prend en charge les opérations de base d'un ensemble, notamment l'ajout d'éléments, la suppression d'éléments, la détermination de l'existence d'éléments, etc. Dans un Set, il n'y a pas de relation séquentielle entre les éléments et chaque élément est unique.

Slice implémente Set

Slice dans Golang peut implémenter la fonction Set, car les éléments de Slice sont ordonnés et chaque élément peut apparaître à plusieurs reprises. Nous pouvons implémenter l'opération de déduplication de Slice via des méthodes personnalisées pour atteindre l'objectif de Set.

type SetSlice []interface{}

func (s *SetSlice) Add(val interface{}) {
    for _, v := range *s {
        if val == v {
            return
        }
    }
    *s = append(*s, val)
}

func (s *SetSlice) Remove(val interface{}) {
    for i, v := range *s {
        if val == v {
            *s = append((*s)[:i], (*s)[i+1:]...)
            return
        }
    }
}

func (s *SetSlice) Contains(val interface{}) bool {
    for _, v := range *s {
        if val == v {
            return true
        }
    }
    return false
}
Copier après la connexion

Dans le code ci-dessus, nous avons personnalisé le type SetSlice et ajouté Add, Remove, Contains et d'autres méthodes. Lors de l'appel de la méthode Add, on vérifie d'abord si le même élément existe en parcourant le Slice, et on retourne directement s'il existe sinon, on ajoute l'élément au Slice lors de la suppression d'un élément, on parcourt le Slice pour trouver l'élément à être ; supprimé et effectuons l'opération de suppression ; Pour déterminer si un élément existe, nous parcourons également la tranche pour trouver l'élément.

Map implémente Set

En plus de Slice, Map in Golang peut également implémenter la fonction Set, car chaque clé de la Map doit être unique. Nous pouvons utiliser la clé de la carte comme valeur de l'élément et définir la valeur de la carte sur n'importe quelle valeur. Peu importe la valeur spécifique, il nous suffit de déterminer si l'élément apparaît dans la carte.

type SetMap map[interface{}]struct{}

var exist = struct{}{}

func (s SetMap) Add(val interface{}) {
    s[val] = exist
}

func (s SetMap) Remove(val interface{}) {
    delete(s, val)
}

func (s SetMap) Contains(val interface{}) bool {
    _, c := s[val]
    return c
}
Copier après la connexion

Dans le code ci-dessus, nous avons personnalisé le type SetMap et ajouté Add, Remove, Contains et d'autres méthodes. Lors de l'appel de la méthode Add, nous insérons directement l'élément dans la Map comme clé de la Map, et la valeur est un type struct{} vide lors de la suppression de l'élément, nous supprimons directement la clé correspondante dans la Map via la fonction de suppression ; ; pour juger si l'élément existe, nous déterminons si l'élément existe en accédant à la clé correspondante dans la carte.

Résumé

Dans Golang, bien qu'il n'y ait pas de type Set, nous pouvons implémenter la fonction Set via des structures de données de base telles que slice et map. L'utilisation de slice pour implémenter Set nécessite une déduplication manuelle, ce qui est plus gênant ; l'utilisation de map pour implémenter Set est plus simple et plus efficace. Bien sûr, si nous devons effectuer des opérations plus complexes sur Set, telles que l'intersection et l'union, il est recommandé d'utiliser une bibliothèque tierce, telle que github.com/deckarep/golang-set, qui peut grandement améliorer l'efficacité.

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