Maison >développement back-end >Golang >Comment puis-je vérifier efficacement le confinement des tranches dans Go ?
Vérification du confinement des tranches dans Go
Dans Go, déterminer si un élément est présent dans une tranche sans itérer sur chaque élément peut être effectué efficacement .
Méthode triviale
Comme Mostafa l'a mentionné, une méthode personnalisée peut être créée pour simplifier la tâche :
func SliceContains(slice []T, target T) bool { for _, item := range slice { if item == target { return true } } return false }
Recherche binaire
Alternativement, mkb a suggéré d'utiliser la recherche binaire du package de tri. Cette approche nécessite une tranche pré-triée et est efficace pour les grands ensembles de données.
sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] }) idx := sort.Search(len(slice), func(i int) bool { return slice[i] == target }) contains := idx != len(slice) && slice[idx] == target
Optimisation de la carte
Si des contrôles de confinement fréquents sont nécessaires, utiliser une carte au lieu de une tranche peut offrir de meilleures performances.
type Set map[string]struct{} func (s Set) Contains(key string) bool { _, ok := s[key] return ok }
L'utilisation d'une valeur struct{} vide dans la carte réduit la surcharge de mémoire et optimise performances de la carte. Set est couramment utilisé pour les opérations de type ensemble dans Go.
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!