Maps, Sets, and Grouping
Iterating Map Entries
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
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)
}
}
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 + bonustotal ← 6
pass 1 of 35var 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 pass kvtotal1 pad 5 0 → 6 2 pen 2 6 → 9 3 ink 8 9 → 18 println("entries=" + prices.size)
10 println("entries=" + prices.size3)11 println("total=" + total18)12 }13}outputentries=3 total=18
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 + bonustotal ← 5
pass 1 of 35var 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 pass kvtotal1 pad 5 0 → 5 2 pen 2 5 → 7 3 ink 8 7 → 15 println("entries=" + prices.size)
10 println("entries=" + prices.size3)11 println("total=" + total15)12 }13}outputentries=3 total=15
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 + bonustotal ← 15
pass 1 of 35var 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 pass kvtotal1 pad 5 0 → 15 2 pen 2 15 → 27 3 ink 8 27 → 45 println("entries=" + prices.size)
10 println("entries=" + prices.size3)11 println("total=" + total45)12 }13}outputentries=3 total=45