Visit each key and value in a map.

map-entries A `for` over a map binds each entry to a key and value. Summing the values gives one scalar result regardless of entry order.

Iterating Map Entries

bonus
MapEntries.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val bonus = 1
    val prices = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)
    var total = 0
    for ((k, v) <- prices) {
      total = total + v + bonus
    }

    println("entries=" + prices.size)
    println("total=" + total)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val bonus = 0
    val prices = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)
    var total = 0
    for ((k, v) <- prices) {
      total = total + v + bonus
    }

    println("entries=" + prices.size)
    println("total=" + total)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val bonus = 10
    val prices = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)
    var total = 0
    for ((k, v) <- prices) {
      total = total + v + bonus
    }

    println("entries=" + prices.size)
    println("total=" + total)
  }
}
  1. bonus ← 1, prices ← Map(pad -> 5, pen -> 2, ink -> 8), total ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val bonus→ 1 = 1 //@bonus=0, 104    val prices→ Map(pad -> 5, pen -> 2, ink -> 8) = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)5    var total→ 0 = 06    for ((k, v) <- prices) {7      total = total + v + bonus
  2. total ← 6

    pass 1 of 3
    5var total = 06for ((kpad, v5) <- pricesMap(pad -> 5, pen -> 2, ink -> 8)) {7  total→ 6 = total + v5 + bonus18}
    All 3 passes — pass 1 is the card above
    passkvtotal
    1pad50 6
    2pen26 9
    3ink89 18
  3. println("entries=" + prices.size)

    10    println("entries=" + prices.size3)11    println("total=" + total18)12  }13}
    outputentries=3
    total=18
  1. bonus ← 0, prices ← Map(pad -> 5, pen -> 2, ink -> 8), total ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val bonus→ 0 = 04    val prices→ Map(pad -> 5, pen -> 2, ink -> 8) = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)5    var total→ 0 = 06    for ((k, v) <- prices) {7      total = total + v + bonus
  2. total ← 5

    pass 1 of 3
    5var total = 06for ((kpad, v5) <- pricesMap(pad -> 5, pen -> 2, ink -> 8)) {7  total→ 5 = total + v5 + bonus08}
    All 3 passes — pass 1 is the card above
    passkvtotal
    1pad50 5
    2pen25 7
    3ink87 15
  3. println("entries=" + prices.size)

    10    println("entries=" + prices.size3)11    println("total=" + total15)12  }13}
    outputentries=3
    total=15
  1. bonus ← 10, prices ← Map(pad -> 5, pen -> 2, ink -> 8), total ← 0

    1object Main {2  def main(args: Array[String]): Unit = {3    val bonus→ 10 = 104    val prices→ Map(pad -> 5, pen -> 2, ink -> 8) = Map("pad" -> 5, "pen" -> 2, "ink" -> 8)5    var total→ 0 = 06    for ((k, v) <- prices) {7      total = total + v + bonus
  2. total ← 15

    pass 1 of 3
    5var total = 06for ((kpad, v5) <- pricesMap(pad -> 5, pen -> 2, ink -> 8)) {7  total→ 15 = total + v5 + bonus108}
    All 3 passes — pass 1 is the card above
    passkvtotal
    1pad50 15
    2pen215 27
    3ink827 45
  3. println("entries=" + prices.size)

    10    println("entries=" + prices.size3)11    println("total=" + total45)12  }13}
    outputentries=3
    total=45