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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 05:27:13396parcourir

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

Trouver la distinction entre les sous-ensembles de tranches de chaîne

Pour déterminer les éléments qui différencient un sous-ensemble de tranches de chaîne d'un autre, considérons le problème suivant :

<p>Here is my desired outcome</p>

<pre class="brush:php;toolbar:false">slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

difference(slice1, slice2)
=> ["hello"]

I need to determine the disparities between these two string slice sections!

Solution

Une approche efficace pour résoudre ce problème, cela suppose que les cartes Go fonctionnent avec une complexité d'environ ~ O (1). Par conséquent, la fonction de différence suggérée fonctionne sur des tranches non triées avec une complexité approximative de ~O(n).

// 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
}

En utilisant une carte pour déterminer efficacement l'appartenance aux éléments, la fonction de différence identifie et isole efficacement les éléments présents. dans une tranche mais pas dans l'autre, fournissant une comparaison précise entre les sous-ensembles de tranches de chaînes.

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