Maison >développement back-end >Golang >Comment puis-je vérifier la présence d'un élément Slice dans Go de manière générique ?

Comment puis-je vérifier la présence d'un élément Slice dans Go de manière générique ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 20:00:29909parcourir

How Can I Check for Slice Element Presence in Go Generically?

Vérification générique de la présence d'un élément de tranche dans Go

Déterminer si une tranche contient un élément particulier est une tâche courante en programmation. Cependant, le langage de programmation Go ne dispose pas d'une fonction intégrée à cet effet.

Une approche consiste à utiliser le type interface{} :

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

Cependant, cette approche nécessite d'écrire manuellement du code. pour chaque type de données, ce qui le rend fastidieux.

Utiliser Reflection pour une solution générique

Heureusement, le package de réflexion de Go permet un code générique capable de gérer n'importe quel type de tranche :

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

    sv := reflect.ValueOf(slice)

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

    // Iterate over slice elements
    for i := 0; i < sv.Len(); i++ {
        if elem == sv.Index(i).Interface() {
            return true
        }
    }

    // Element not found
    return false
}</code>

Considérations sur les performances

Bien que l'approche basée sur la réflexion soit générique, elle entraîne une pénalité de performances significative par rapport aux fonctions non génériques spécifiques à un type. Les benchmarks ont montré un ralentissement de 50 à 60 x :

Generic: 730.23214 ns/op
Non-Generic: 13.15262 ns/op

Conclusion

Bien que la réflexion offre un moyen d'écrire du code générique pour la vérification des éléments de tranche, il est important de peser soigneusement les compromis en termes de performances. . Pour les scénarios où les performances sont critiques, les fonctions non génériques spécifiques au type sont fortement recommandées.

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