Wie teile ich eine Sequenz durch ein Prädikat in zwei Listen auf?
Alternative: Ich kann meine eigene Methode verwenden filter
und filterNot
/ oder schreiben, aber gibt es keine allgemeinere (integrierte) Methode?
Mit der partition
Methode:
scala> List(1,2,3,4).partition(x => x % 2 == 0)
res0: (List[Int], List[Int]) = (List(2, 4),List(1, 3))
val (even, odd) = List(1,2,3,4).partition(x => x % 2 == 0)
ist eine Möglichkeit, das resultierende Tupel vonpartition
auf lesbare Weise zu zerstören ._ % 2 == 0
.Gut, das
partition
war das, was Sie wollten - es gibt eine andere Methode, die auch ein Prädikat verwendet, um eine Liste in zwei Teile zu teilen :span
.Die erste Partition fügt alle "wahren" Elemente in eine Liste und die anderen in die zweite Liste ein.
span fügt alle Elemente in eine Liste ein, bis ein Element "falsch" ist (in Bezug auf das Prädikat). Ab diesem Zeitpunkt werden die Elemente in die zweite Liste aufgenommen.
quelle
Vielleicht möchten Sie einen Blick auf scalex.org werfen - hier können Sie die Scala-Standardbibliothek anhand ihrer Signatur nach Funktionen durchsuchen. Geben Sie beispielsweise Folgendes ein:
Sie würden Partition sehen .
quelle
Sie können auch foldLeft verwenden, wenn Sie etwas mehr benötigen. Ich habe gerade einen Code wie diesen geschrieben, als die Partition ihn nicht geschnitten hat:
quelle
Ich weiß, dass ich vielleicht zu spät zur Party komme und es gibt spezifischere Antworten, aber Sie könnten sie gut gebrauchen
groupBy
Dies macht Ihren Code ein bisschen zukunftssicherer, wenn Sie die Bedingung in etwas nicht Boolesches ändern müssen.
quelle
Wenn Sie eine Liste in mehr als 2 Teile aufteilen und die Grenzen ignorieren möchten, können Sie Folgendes verwenden (ändern, wenn Sie nach Ints suchen müssen).
quelle