Maison >développement back-end >Golang >Comment puis-je vérifier efficacement le confinement des tranches dans Go ?

Comment puis-je vérifier efficacement le confinement des tranches dans Go ?

DDD
DDDoriginal
2024-12-22 09:21:00467parcourir

How Can I Efficiently Check for Slice Containment in 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!

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