Gibt es eine API-Methode vergleicht den Inhalt von Seq unabhängig von der Reihenfolge?
Vorausgesetzt:
val l1 = List(1,2,3)
val l2 = List(2,3,1)
Will ich eine Methode, die bestätigt, dass l1 gleich l2 (wie in gleichen Inhalt, aber unterschiedlicher Reihenfolge). Gibt es eine API-Methode, die auf List/Seq, dies zu tun?
l1.sameElements(l2)
nicht funktioniert, wie es überprüft, um als gut.
Habe ich kommen mit dem folgenden:
l1.foldLeft(l1.size == l2.size)(_ && l2.contains(_))
Ist es etwas kürzer als die oben genannten zu tun, dieser Vergleich?
- stackoverflow.com/questions/2944617/...
- Wie funktioniert die verlinkte Frage bezieht zu dieser Frage?
- Sets könnte, sein problem zu lösen, aber sein Kommentar zu der Antwort unter Staaten will er die Duplikate werden ebenfalls unterstützt, so Legt sich nun nicht mehr funktionieren.
- Ja, in der Frage, die ich überprüfen, dass die Größe der Listen gleich sind. Also im Grunde die Listen müssten von gleicher Größe, Duplikate oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das, was Sie wollen, ist "diese Listen enthalten die gleichen Elemente, unabhängig von der Reihenfolge oder Wiederholungen":
l1.toSet == l2.toSet
Wenn das, was Sie wollen, ist "diese Listen enthalten die gleichen Elemente, und mit der gleichen Anzahl von Wiederholungen jeder":
l1.sorted == l2.sorted
Wenn das, was Sie wollen, ist "diese Listen enthalten die gleichen Elemente und die gleiche Größe, aber die Anzahl der Wiederholungen eines Elements unterscheiden können zwischen den beiden Listen":
l1.size == l2.size && l1.toSet == l2.toSet
List(1,2,3,3)
, als gleich zuList(3,2,1)
nach dieser hypothetischen Funktion, dann vergleichen der Liste mit den Größen würde ausschließen...l1.size == l2.size && l1.toSet == l2.toSet
l1.sorted == l2.sorted
Während
ist richtig, es ist runtime-Leistung ist O(n log n), wegen der Sortierung. Für große Listen, sind Sie wahrscheinlich besser mit
werden sollte O(n), vorausgesetzt, eine anständige Umsetzung von groupBy.
l1.groupBy(identity).mapValues(_.length) == ...
würde aber funktionieren.