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
Linda Hamiltonoriginal
2024-11-02 03:11:30362parcourir

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>

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>

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!

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