Look up a value by key with a fallback.

map-lookup A map stores values by key. A fallback handles keys that are not present.

Map Lookup

key
MapLookup.scala
Replay: real traced execution (multi-file project)
object Main {
  def main(args: Array[String]): Unit = {
    val key = "scala"
    val scores = Map("scala" -> 95, "java" -> 88)
    val score = scores.getOrElse(key, 0)
    val label = if (score > 0) "known" else "missing"

    println("key=" + key)
    println("score=" + score)
    println("label=" + label)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val key = "java"
    val scores = Map("scala" -> 95, "java" -> 88)
    val score = scores.getOrElse(key, 0)
    val label = if (score > 0) "known" else "missing"

    println("key=" + key)
    println("score=" + score)
    println("label=" + label)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    val key = "ruby"
    val scores = Map("scala" -> 95, "java" -> 88)
    val score = scores.getOrElse(key, 0)
    val label = if (score > 0) "known" else "missing"

    println("key=" + key)
    println("score=" + score)
    println("label=" + label)
  }
}
  1. key ← scala, scores ← Map(scala -> 95, java -> 88), score ← 95

    1object Main {2  def main(args: Array[String]): Unit = {3    val key→ scala = "scala" //@key="java", "ruby"4    val scores→ Map(scala -> 95, java -> 88) = Map("scala" -> 95, "java" -> 88)5    val score→ 95 = scoresMap(scala -> 95, java -> 88).getOrElse(keyscala, 0)6    val label→ known = if (score95 > 0) "known" else "missing"78    println("key=" + keyscala)9    println("score=" + score95)10    println("label=" + labelknown)11  }12}
    outputkey=scala
    score=95
    label=known
  1. key ← java, scores ← Map(scala -> 95, java -> 88), score ← 88

    1object Main {2  def main(args: Array[String]): Unit = {3    val key→ java = "java"4    val scores→ Map(scala -> 95, java -> 88) = Map("scala" -> 95, "java" -> 88)5    val score→ 88 = scoresMap(scala -> 95, java -> 88).getOrElse(keyjava, 0)6    val label→ known = if (score88 > 0) "known" else "missing"78    println("key=" + keyjava)9    println("score=" + score88)10    println("label=" + labelknown)11  }12}
    outputkey=java
    score=88
    label=known
  1. key ← ruby, scores ← Map(scala -> 95, java -> 88), score ← 0, label ← missing

    1object Main {2  def main(args: Array[String]): Unit = {3    val key→ ruby = "ruby"4    val scores→ Map(scala -> 95, java -> 88) = Map("scala" -> 95, "java" -> 88)5    val score→ 0 = scoresMap(scala -> 95, java -> 88).getOrElse(keyruby, 0)6    val label→ missing = if (score0 > 0) "known" else "missing"78    println("key=" + keyruby)9    println("score=" + score0)10    println("label=" + labelmissing)11  }12}
    outputkey=ruby
    score=0
    label=missing

Look Up with a Fallback

  1. The map stores scores for scala and java.
  2. key is scala.
  3. getOrElse(key, 0) returns the stored score.
  4. A positive score makes the label known. | Key | Score | Label | | --- | --- | --- | | scala | 95 | known | | ruby | 0 | missing |

Exercise: MapLookup.scala

Look up a score with getOrElse, then print the score and known-or-missing label