Maison >développement back-end >Golang >Comment puis-je rechercher efficacement des éléments dans Go Slices ?
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.
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 }
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 }
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 }
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!