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
Libérer: 2024-10-28 20:00:29
original
969 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

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!

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