Maison > développement back-end > Golang > Comment vérifier efficacement la présence d'éléments dans les tranches Go ?

Comment vérifier efficacement la présence d'éléments dans les tranches Go ?

Barbara Streisand
Libérer: 2024-12-12 15:17:18
original
514 Les gens l'ont consulté

How to Efficiently Check for Element Presence in Go Slices?

Vérification de la présence d'éléments dans les tranches Go

Dans Go, une tranche n'inclut pas nativement une méthode comme slice.contains(object) pour déterminer la présence d'un élément. Au lieu de cela, une solution courante consiste à parcourir chaque élément pour effectuer la recherche.

Approches alternatives :

Méthode personnalisée :

Créer une méthode slice.contains() personnalisée est une option simple, comme indiqué par Mostafa.

package main

import "fmt"

func main() {
    slice := []int{1, 2, 3}
    if sliceContains(slice, 2) {
        fmt.Println("Contains")
    } else {
        fmt.Println("Not contains")
    }
}

func sliceContains(slice []int, object int) bool {
    for _, v := range slice {
        if v == object {
            return true
        }
    }
    return false
}
Copier après la connexion

Recherche binaire :

Comme suggéré par mkb, l'utilisation de l'algorithme de recherche binaire du package de tri offre une approche plus efficace pour les grandes tranches.

package main

import (
    "fmt"
    "sort"
)

func main() {
    slice := []int{1, 2, 3}
    sort.Ints(slice)
    index := sort.SearchInts(slice, 2)
    if index != len(slice) {
        fmt.Println("Contains")
    } else {
        fmt.Println("Not contains")
    }
}
Copier après la connexion

Utilisation d'une carte :

Si nombreux des contrôles d'existence sont prévus, l'utilisation d'une carte comme alternative à une tranche fournit une solution plus efficace.

package main

import (
    "fmt"
    "sync"
)

func main() {
    slice := []int{1, 2, 3}
    m := make(map[int]struct{}, len(slice))
    for _, v := range slice {
        m[v] = struct{}{}
    }
    if _, exists := m[2]; exists {
        fmt.Println("Contains")
    } else {
        fmt.Println("Not contains")
    }
}
Copier après la connexion

Dans ce scénario, une map[string]struct{} est fréquemment utilisée pour les ensembles en raison de son optimisation type de carte interne pour de telles valeurs.

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