10.19. Splitting Sequences into Subsets (groupBy, partition, etc.)
Problem
You want to partition a sequence into two or more different sequences (subsets) based on an algorithm or location you define.
Solution
Use the groupBy, partition, span, or splitAt methods to partition a sequence into
subsequences. The sliding and
unzip methods can also be used to
split sequences into subsequences, though sliding can generate many subsequences, and
unzip primarily works on a sequence
of Tuple2 elements.
The groupBy, partition, and span methods let you split a sequence into
subsets according to a function, whereas splitAt lets you split a collection into two
sequences by providing an index number, as shown in these
examples:
scala>val x = List(15, 10, 5, 8, 20, 12)x: List[Int] = List(15, 10, 5, 8, 20, 12) scala>val y = x.groupBy(_ > 10)y: Map[Boolean,List[Int]] = Map(false -> List(10, 5, 8), true -> List(15, 20, 12)) scala>val y = x.partition(_ > 10)y: (List[Int], List[Int]) = (List(15, 20, 12), List(10, 5, 8)) scala>val y = x.span(_ < 20)y: (List[Int], List[Int]) = (List(15, 10, 5, 8), List(20, 12)) scala>val y = x.splitAt(2)y: (List[Int], List[Int]) = (List(15, 10), List(5, 8, 20, 12))
The groupBy method partitions
the collection into a Map of
subcollections based on your function. The true map contains the elements for which your
predicate returned true, and the
false map contains the elements that
returned false.
The partition, span, and splitAt methods create a Tuple2 of sequences that ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access