Maison >développement back-end >Golang >Comment puis-je trouver efficacement la différence entre deux tranches de chaîne dans 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!