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
Barbara Streisandoriginal
2024-12-12 15:17:18518parcourir

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
}

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")
    }
}

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")
    }
}

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!

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