Maison > développement back-end > Golang > Comment puis-je rechercher efficacement des éléments dans Go Slices ?

Comment puis-je rechercher efficacement des éléments dans Go Slices ?

Barbara Streisand
Libérer: 2024-12-21 14:47:16
original
483 Les gens l'ont consulté

How Can I Efficiently Search for Elements in Go Slices?

Recherche efficace d'éléments dans les tranches

La recherche d'un élément dans une tranche peut souvent impliquer des boucles itératives. Cependant, il existe des méthodes alternatives pour optimiser ce processus.

Solution intégrée

Bien que Go ne fournisse pas de méthode slice.contains() intégrée, en créer une est relativement simple. Vous pouvez définir une fonction telle que :

func Contains[T comparable](s []T, v T) bool {
    for _, item := range s {
        if item == v {
            return true
        }
    }
    return false
}
Copier après la connexion

Recherche binaire

Pour des tranches plus grandes, envisagez d'utiliser l'algorithme de recherche binaire du package de tri. Il vérifie l'élément central et affine récursivement la recherche en fonction du résultat, ce qui entraîne de meilleures performances pour les tranches triées :

func BinaryContains[T comparable](s []T, v T) bool {
    i := sort.Search(len(s), func(i int) bool { return s[i] >= v })
    return i < len(s) && s[i] == v
}
Copier après la connexion

Cartes pour les ensembles

Si vous effectuez fréquemment des vérifications de contenu sur les tranches , pensez plutôt à utiliser une carte. Maps in Go offre des recherches efficaces de valeurs-clés. En utilisant une structure vide{} comme type de valeur, vous pouvez créer une carte qui sert efficacement d'ensemble :

type Set[T comparable] map[T]struct{}

func NewSet[T comparable]() *Set[T] {
    return new(Set[T])
}

func (s *Set[T]) Add(v T) {
    (*s)[v] = struct{}{}
}

func (s *Set[T]) Contains(v T) bool {
    _, ok := (*s)[v]
    return ok
}
Copier après la connexion

En exploitant les cartes ou en optimisant la recherche de tranches, vous pouvez vérifier efficacement l'existence d'un élément dans Go tranches.

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