Maison > développement back-end > Golang > Comment vérifier la présence d'éléments dans des tranches de différents types dans Go ?

Comment vérifier la présence d'éléments dans des tranches de différents types dans Go ?

Linda Hamilton
Libérer: 2024-11-02 03:11:30
original
364 Les gens l'ont consulté

How do you check for element presence in slices of different types in Go?

Comment vérifier de manière générique la présence d'un élément dans une tranche dans Go

Dans Go, déterminer si une tranche contient un élément spécifique peut être un scénario courant. Cependant, il n'existe aucune méthode intégrée pour effectuer cette vérification générique sur différents types de tranches.

Tentative échouée avec l'interface{}

Tentative d'utilisation de l'interface{ } comme solution générique, comme indiqué ci-dessous, peut sembler plausible :

<code class="go">func sliceContains(slice []interface{}, elem interface{}) bool {
    for _, item := range slice {
       if item == elem {
          return true
       }
    }
    return false
}</code>
Copier après la connexion

Cependant, comparer des valeurs de différents types (interface{}) peut conduire à des résultats incorrects.

Solution générique avec réflexion

Pour obtenir une solution véritablement générique, la réflexion peut être utilisée. La fonction suivante utilise la réflexion pour parcourir la tranche et comparer chaque élément à l'élément cible :

<code class="go">func Contains(slice, elem interface{}) bool {

    sv := reflect.ValueOf(slice)

    // Check that slice is actually a slice/array.
    if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array {
        return false
    }

    // Iterate the slice
    for i := 0; i < sv.Len(); i++ {

        // Compare elem to the current slice element
        if elem == sv.Index(i).Interface() {
            return true
        }
    }

    // Nothing found
    return false
}</code>
Copier après la connexion

Cette solution vous permet d'effectuer des vérifications d'éléments génériques sur des tranches de tout type.

Considérations relatives aux performances

Bien que la fonction générique Contient fournisse la fonctionnalité souhaitée, elle entraîne un coût de performances important. L'analyse comparative avec une fonction équivalente non générique donne un facteur de ralentissement d'environ 50x. Par conséquent, il est crucial d'évaluer les implications en termes de performances avant d'utiliser la réflexion pour les vérifications d'éléments génériques.

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