Y a t il une méthode de l'API qui compare le contenu de Seq indépendamment de l'ordre?
En supposant que:
val l1 = List(1,2,3)
val l2 = List(2,3,1)
Je veux une méthode qui confirme que la l1 est égal à l2 (comme dans le même contenu, mais un ordre différent). Y a t il une méthode de l'API sur Liste/Seq pour ce faire?
l1.sameElements(l2)
ne fonctionne pas comme il vérifie l'ordre en tant que bien.
Je suis venu avec les éléments suivants:
l1.foldLeft(l1.size == l2.size)(_ && l2.contains(_))
Est-il rien de plus succincte que celle ci-dessus pour faire cette comparaison?
- stackoverflow.com/questions/2944617/...
- Comment liées question se rapportent à cette question?
- Jeux pourrait résoudre son problème, mais son commentaire à la réponse ci-dessous il veut doubles pour être pris en charge aussi, donc les Jeux de maintenant ne fonctionne pas.
- Oui, dans la question, je vérifie que la taille des listes sont égales. Donc, fondamentalement, les listes doivent être de taille égale, les doublons ou pas.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez ", ces listes contiennent les mêmes éléments, quelle que soit d'ordre ou de répétitions":
l1.toSet == l2.toSet
Si vous voulez ", ces listes contiennent les mêmes éléments, et avec le même nombre de répétitions de chaque":
l1.sorted == l2.sorted
Si vous voulez ", ces listes contiennent les mêmes éléments, et de la même taille, mais le nombre de répétitions d'un élément donné peut différer entre les deux listes":
l1.size == l2.size && l1.toSet == l2.toSet
List(1,2,3,3)
être considérée comme égale àList(3,2,1)
selon cette fonction hypothétique, en comparant la liste des tailles voudrais déclarer que...l1.size == l2.size && l1.toSet == l2.toSet
l1.sorted == l2.sorted
Tout
est correct, c'est les performances d'exécution est O(n log n), en raison de la tri. Pour les grandes listes, vous êtes probablement mieux avec
qui devrait être O(n), en supposant un décent de mise en œuvre de groupBy.
l1.groupBy(identity).mapValues(_.length) == ...
serait un travail même si.