Comment trouver la différence entre deux tranches de chaînes dans Golang?
Voici mon résultat souhaité
slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}
difference(slice1, slice2)
=> ["hello"]
Je suis à la recherche de la différence entre la chaîne de deux tranches de!
Peut-on supposer ordre des chaînes n'a pas d'importance?
Je présume que je devais comparer, chaque indice avec l'équivalent de l'indice. Sinon, il faudrait impliquer le tri sur les tranches, ou en faisant un très lente comparaison de chaque membre de la tranche à tous les membres de l'autre tranche. J'espère que c'est tout ce qu'il faut!
Oui, ma réponse a été que de l'ordre de l'indice de position n'a pas d'importance. Bien sûr, le mien est juste un simple et "stupide" de la boucle avec le temps O(n*m) . Pour les plus grands, peut-être une sorte ou d'une carte solution est meilleure.
difflib
Je présume que je devais comparer, chaque indice avec l'équivalent de l'indice. Sinon, il faudrait impliquer le tri sur les tranches, ou en faisant un très lente comparaison de chaque membre de la tranche à tous les membres de l'autre tranche. J'espère que c'est tout ce qu'il faut!
Oui, ma réponse a été que de l'ordre de l'indice de position n'a pas d'importance. Bien sûr, le mien est juste un simple et "stupide" de la boucle avec le temps O(n*m) . Pour les plus grands, peut-être une sorte ou d'une carte solution est meilleure.
difflib
OriginalL'auteur samol | 2013-10-15
Vous devez vous connecter pour publier un commentaire.
Selon la taille des tranches, différentes solutions pourrait être la meilleure.
Ma réponse suppose ordre n'a pas d'importance.
À l'aide de simples boucles, uniquement pour être utilisé avec de petites tranches:
De sortie:
Aire de jeux: http://play.golang.org/p/KHTmJcR4rg
slice1 := []string{"foo"} slice2 := []string{"foo", "foo"}
vous n'obtenez pas de différence. Je souhaite que nous avons eu plus de direction sur les points les plus fins de ce qui constitue une "différence"! Est-il de données + index, il vous suffit de données ou de données unique? De toute façon, très belle réponse.Dans mon exemple, j'ai volontairement ajouté deux "foo" dans la deuxième tranche, juste pour rendre les choses claires sur la façon dont la fonction se comporte dans de tels cas. Mais ouais, les deux réponses sont correctes en fonction de la façon dont OP définit la "différence".
Oui j'ai remarqué, c'est ce qui a déclenché ma pensée, et je suis heureux que vous êtes illustrant le fait dans l'exemple. Il est intéressant de voir comment une telle question en apparence simple implique de nombreuses mises en garde 🙂 Peut-être que nous allons obtenir des élucidation de l'OP!
OriginalL'auteur ANisus
En supposant Aller les cartes sont ~O(1), voici un ~O(n) différence de fonction qui fonctionne sur les ménagères de tranches.
OriginalL'auteur user604260
- Je utiliser la carte pour résoudre ce problème
de sortie:
bonjour
monde
OriginalL'auteur alexis
OriginalL'auteur Michael Dorner
Comme mentionné par ANisus, des approches différentes selon les différentes tailles d'entrée tranches. Cette solution fonctionne dans le temps linéaire
O(n)
indépendant de la taille de l'image, mais suppose que "l'égalité" comprend la position d'index.Ainsi, dans le cas des OP exemples de:
Les entrées
foo
etbar
sont égaux non seulement en raison de la valeur, mais aussi en raison de leur index dans la tranche.Compte tenu de ces conditions, vous pouvez faire quelque chose comme:
Produit:
Aire de jeux
Si vous modifiez les tranches à:
Il va produire:
slice1 := []string{"foo", "bar", "hello"}
etslice2 := []string{"foox","foo", "bar"}
? Le programme des sortiesfoo
etbar
, qui sont dans les deux tranches.Intermernet fait de la présomption que l'OP voulait comparer chaque indice avec l'équivalent de l'indice. L'OP n'était pas très clair dans ce genre de comparaison qu'il voulait en considérant l'ordre et les valeurs de l'indice.
vous avez raison, j'ai raté ça. Je pense que je vais laisser mon commentaire, afin que les futurs utilisateurs sont conscients de ce problème.
Oui, je présume que l'OP voulait comparer l'indice par indice. La solution fournie par ANisus est probablement ce que l'OP a été, après, bien que je ne pouvais pas penser à un moyen d'y parvenir tout en traitant avec de grandes tranches sans dégradation des performances.
OriginalL'auteur Intermernet