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
Libérer: 2024-12-22 09:21:00
original
565 Les gens l'ont consulté

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
}
Copier après la connexion

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
Copier après la connexion

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
}
Copier après la connexion

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 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