Maison >développement back-end >Golang >Comment trouver efficacement la différence entre deux tranches de chaîne dans Go ?

Comment trouver efficacement la différence entre deux tranches de chaîne dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 12:59:11660parcourir

How to Efficiently Find the Difference Between Two String Slices in Go?

Trouver la différence entre deux tranches de chaîne

En programmation, comparer le contenu de deux tranches est une tâche courante. Cette question se concentre sur l'identification des éléments présents dans une tranche mais pas dans une autre, trouvant efficacement la « différence » entre eux.

Le résultat souhaité est de recevoir une nouvelle tranche contenant les éléments uniques de la première tranche qui sont pas présent dans la seconde. Par exemple, si slice1 contient ["foo", "bar", "hello"] et slice2 contient ["foo", "bar"], la différence serait ["hello"].

Une solution simple utilisant une carte

Une approche fiable pour résoudre ce problème consiste à utiliser une carte. Maps in Go offre des opérations de recherche efficaces, avec une complexité temporelle approximativement constante de O(1). Voici comment nous pouvons mettre en œuvre cette approche :

// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
    mb := make(map[string]struct{}, len(b))
    for _, x := range b {
        mb[x] = struct{}{}
    }

    var diff []string
    for _, x := range a {
        if _, found := mb[x]; !found {
            diff = append(diff, x)
        }
    }

    return diff
}

Explication

Cette fonction prend deux tranches de chaîne, a et b, en entrée. Il construit une carte, mb, qui mappe chaque élément de b à une structure vide. Cette carte est utilisée pour déterminer efficacement la présence d'éléments dans b avec des recherches O(1).

La fonction parcourt ensuite a, vérifiant chaque élément par rapport aux éléments présents dans mb. Si un élément de a n'est pas trouvé dans mb, il est ajouté à la tranche de diff.

Enfin, la tranche de diff contenant les éléments uniques de a qui ne sont pas présents dans b est renvoyée.

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