Group values into labeled buckets.

grouping `groupBy` sorts elements into buckets keyed by a label function. Reading each bucket's size reports how many elements landed in it.

Grouping

pivot
Grouping.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val pivot = 3
    val nums = List(1, 2, 3, 4, 5, 6)
    val groups = nums.groupBy(n => if (n <= pivot) "low" else "high")
    val low = groups.getOrElse("low", List()).size
    val high = groups.getOrElse("high", List()).size

    println("low=" + low)
    println("high=" + high)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val pivot = 2
    val nums = List(1, 2, 3, 4, 5, 6)
    val groups = nums.groupBy(n => if (n <= pivot) "low" else "high")
    val low = groups.getOrElse("low", List()).size
    val high = groups.getOrElse("high", List()).size

    println("low=" + low)
    println("high=" + high)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val pivot = 4
    val nums = List(1, 2, 3, 4, 5, 6)
    val groups = nums.groupBy(n => if (n <= pivot) "low" else "high")
    val low = groups.getOrElse("low", List()).size
    val high = groups.getOrElse("high", List()).size

    println("low=" + low)
    println("high=" + high)
  }
}
  1. pivot ← 3, nums ← List(1, 2, 3, 4, 5, 6), groups ← HashMap(low -> List(1, 2, 3), high -> List(4, 5, 6))

    1object Main {2  def main(args: Array[String]): Unit = {3    val pivot→ 3 = 3 //@pivot=2, 44    val nums→ List(1, 2, 3, 4, 5, 6) = List(1, 2, 3, 4, 5, 6)5    val groups→ HashMap(low -> List(1, 2, 3), high -> List(4, 5, 6)) = numsList(1, 2, 3, 4, 5, 6).groupBy(n => if (n <= pivot) "low" else "high")6    val low→ 3 = groupsHashMap(low -> List(1, 2, 3), high -> List(4, 5, 6)).getOrElse("low", List()).size7    val high→ 3 = groupsHashMap(low -> List(1, 2, 3), high -> List(4, 5, 6)).getOrElse("high", List()).size89    println("low=" + low3)10    println("high=" + high3)11  }12}
    outputlow=3
    high=3
  1. pivot ← 2, nums ← List(1, 2, 3, 4, 5, 6), groups ← HashMap(low -> List(1, 2), high -> List(3, 4, 5, 6))

    1object Main {2  def main(args: Array[String]): Unit = {3    val pivot→ 2 = 24    val nums→ List(1, 2, 3, 4, 5, 6) = List(1, 2, 3, 4, 5, 6)5    val groups→ HashMap(low -> List(1, 2), high -> List(3, 4, 5, 6)) = numsList(1, 2, 3, 4, 5, 6).groupBy(n => if (n <= pivot) "low" else "high")6    val low→ 2 = groupsHashMap(low -> List(1, 2), high -> List(3, 4, 5, 6)).getOrElse("low", List()).size7    val high→ 4 = groupsHashMap(low -> List(1, 2), high -> List(3, 4, 5, 6)).getOrElse("high", List()).size89    println("low=" + low2)10    println("high=" + high4)11  }12}
    outputlow=2
    high=4
  1. pivot ← 4, nums ← List(1, 2, 3, 4, 5, 6), groups ← HashMap(low -> List(1, 2, 3, 4), high -> List(5, 6))

    1object Main {2  def main(args: Array[String]): Unit = {3    val pivot→ 4 = 44    val nums→ List(1, 2, 3, 4, 5, 6) = List(1, 2, 3, 4, 5, 6)5    val groups→ HashMap(low -> List(1, 2, 3, 4), high -> List(5, 6)) = numsList(1, 2, 3, 4, 5, 6).groupBy(n => if (n <= pivot) "low" else "high")6    val low→ 4 = groupsHashMap(low -> List(1, 2, 3, 4), high -> List(5, 6)).getOrElse("low", List()).size7    val high→ 2 = groupsHashMap(low -> List(1, 2, 3, 4), high -> List(5, 6)).getOrElse("high", List()).size89    println("low=" + low4)10    println("high=" + high2)11  }12}
    outputlow=4
    high=2