Count how often each value appears.

frequency-count A frequency count builds a map from each value to its running tally. Each step reads the current count and stores one more.

Counting Frequencies

target
FrequencyCount.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val target = 2
    val items = List(1, 2, 2, 3, 2, 1)
    var counts = Map[Int, Int]()
    for (n <- items) {
      val current = counts.getOrElse(n, 0)
      counts = counts + (n -> (current + 1))
    }
    val targetCount = counts.getOrElse(target, 0)

    println("distinct=" + counts.size)
    println("targetCount=" + targetCount)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val target = 1
    val items = List(1, 2, 2, 3, 2, 1)
    var counts = Map[Int, Int]()
    for (n <- items) {
      val current = counts.getOrElse(n, 0)
      counts = counts + (n -> (current + 1))
    }
    val targetCount = counts.getOrElse(target, 0)

    println("distinct=" + counts.size)
    println("targetCount=" + targetCount)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val target = 3
    val items = List(1, 2, 2, 3, 2, 1)
    var counts = Map[Int, Int]()
    for (n <- items) {
      val current = counts.getOrElse(n, 0)
      counts = counts + (n -> (current + 1))
    }
    val targetCount = counts.getOrElse(target, 0)

    println("distinct=" + counts.size)
    println("targetCount=" + targetCount)
  }
}
  1. target ← 2, items ← List(1, 2, 2, 3, 2, 1), counts ← Map()

    1object Main {2  def main(args: Array[String]): Unit = {3    val target→ 2 = 2 //@target=1, 34    val items→ List(1, 2, 2, 3, 2, 1) = List(1, 2, 2, 3, 2, 1)5    var counts→ Map() = Map[Int, Int]()6    for (n <- items) {7      val current = counts.getOrElse(n, 0)
  2. current ← 0, counts ← Map(1 -> 1)

    pass 1 of 6
    5var counts = Map[Int, Int]()6for (n1 <- itemsList(1, 2, 2, 3, 2, 1)) {7  val current→ 0 = countsMap().getOrElse(n1, 0)8  counts→ Map(1 -> 1) = counts + (n1 -> (current0 + 1))9}10val targetCount = counts.getOrElse(target, 0)
    All 6 passes — pass 1 is the card above
    passncurrentcounts
    110Map() Map(1 -> 1)
    220Map(1 -> 1) Map(1 -> 1, 2 -> 1)
    321Map(1 -> 1, 2 -> 1) Map(1 -> 1, 2 -> 2)
    430Map(1 -> 1, 2 -> 2) Map(1 -> 1, 2 -> 2, 3 -> 1)
    522Map(1 -> 1, 2 -> 2, 3 -> 1) Map(1 -> 1, 2 -> 3, 3 -> 1)
    611Map(1 -> 1, 2 -> 3, 3 -> 1) Map(1 -> 2, 2 -> 3, 3 -> 1)
  3. targetCount ← 3

    9    }10    val targetCount→ 3 = countsMap(1 -> 2, 2 -> 3, 3 -> 1).getOrElse(target2, 0)1112    println("distinct=" + counts.size3)13    println("targetCount=" + targetCount3)14  }15}
    outputdistinct=3
    targetCount=3
  1. target ← 1, items ← List(1, 2, 2, 3, 2, 1), counts ← Map()

    1object Main {2  def main(args: Array[String]): Unit = {3    val target→ 1 = 14    val items→ List(1, 2, 2, 3, 2, 1) = List(1, 2, 2, 3, 2, 1)5    var counts→ Map() = Map[Int, Int]()6    for (n <- items) {7      val current = counts.getOrElse(n, 0)
  2. current ← 0, counts ← Map(1 -> 1)

    pass 1 of 6
    5var counts = Map[Int, Int]()6for (n1 <- itemsList(1, 2, 2, 3, 2, 1)) {7  val current→ 0 = countsMap().getOrElse(n1, 0)8  counts→ Map(1 -> 1) = counts + (n1 -> (current0 + 1))9}10val targetCount = counts.getOrElse(target, 0)
    All 6 passes — pass 1 is the card above
    passncurrentcounts
    110Map() Map(1 -> 1)
    220Map(1 -> 1) Map(1 -> 1, 2 -> 1)
    321Map(1 -> 1, 2 -> 1) Map(1 -> 1, 2 -> 2)
    430Map(1 -> 1, 2 -> 2) Map(1 -> 1, 2 -> 2, 3 -> 1)
    522Map(1 -> 1, 2 -> 2, 3 -> 1) Map(1 -> 1, 2 -> 3, 3 -> 1)
    611Map(1 -> 1, 2 -> 3, 3 -> 1) Map(1 -> 2, 2 -> 3, 3 -> 1)
  3. targetCount ← 2

    9    }10    val targetCount→ 2 = countsMap(1 -> 2, 2 -> 3, 3 -> 1).getOrElse(target1, 0)1112    println("distinct=" + counts.size3)13    println("targetCount=" + targetCount2)14  }15}
    outputdistinct=3
    targetCount=2
  1. target ← 3, items ← List(1, 2, 2, 3, 2, 1), counts ← Map()

    1object Main {2  def main(args: Array[String]): Unit = {3    val target→ 3 = 34    val items→ List(1, 2, 2, 3, 2, 1) = List(1, 2, 2, 3, 2, 1)5    var counts→ Map() = Map[Int, Int]()6    for (n <- items) {7      val current = counts.getOrElse(n, 0)
  2. current ← 0, counts ← Map(1 -> 1)

    pass 1 of 6
    5var counts = Map[Int, Int]()6for (n1 <- itemsList(1, 2, 2, 3, 2, 1)) {7  val current→ 0 = countsMap().getOrElse(n1, 0)8  counts→ Map(1 -> 1) = counts + (n1 -> (current0 + 1))9}10val targetCount = counts.getOrElse(target, 0)
    All 6 passes — pass 1 is the card above
    passncurrentcounts
    110Map() Map(1 -> 1)
    220Map(1 -> 1) Map(1 -> 1, 2 -> 1)
    321Map(1 -> 1, 2 -> 1) Map(1 -> 1, 2 -> 2)
    430Map(1 -> 1, 2 -> 2) Map(1 -> 1, 2 -> 2, 3 -> 1)
    522Map(1 -> 1, 2 -> 2, 3 -> 1) Map(1 -> 1, 2 -> 3, 3 -> 1)
    611Map(1 -> 1, 2 -> 3, 3 -> 1) Map(1 -> 2, 2 -> 3, 3 -> 1)
  3. targetCount ← 1

    9    }10    val targetCount→ 1 = countsMap(1 -> 2, 2 -> 3, 3 -> 1).getOrElse(target3, 0)1112    println("distinct=" + counts.size3)13    println("targetCount=" + targetCount1)14  }15}
    outputdistinct=3
    targetCount=1