Maps, Sets, and Grouping
Grouping
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
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)
}
}
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
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
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