The Scala Map Class
The Scala Map class documentation describes a Map
as an iterable sequence that consists of pairs of keys and values. A simple Map
looks like this:
val states = Map(
"AK" -> "Alaska",
"IL" -> "Illinois",
"KY" -> "Kentucky"
)
Scala has both mutable and immutable Map
classes. In this lesson I’ll show how to use the mutable class. (Please see the Scala Cookbook for examples of the immutable Map
class.)
Creating a mutable Map
To use the mutable Map
class, first import it:
import scala.collection.mutable.Map
Then you can create a Map
like this:
val states = collection.mutable.Map("AK" -> "Alaska")
Adding elements to a Map
Now you can add a single element to the Map
with +=
, like this:
states += ("AL" -> "Alabama")
You also add multiple elements using +=
:
states += ("AR" -> "Arkansas", "AZ" -> "Arizona")
You can add elements from another Map
using ++=
:
states ++= Map("CA" -> "California", "CO" -> "Colorado")
The REPL shows how these examples work:
scala> val states = collection.mutable.Map("AK" -> "Alaska")
states: scala.collection.mutable.Map[String,String] = Map(AK -> Alaska)
scala> states += ("AL" -> "Alabama")
res0: states.type = Map(AL -> Alabama, AK -> Alaska)
scala> states += ("AR" -> "Arkansas", "AZ" -> "Arizona")
res1: states.type = Map(AZ -> Arizona, AL -> Alabama, AR -> Arkansas, AK -> Alaska)
scala> states ++= Map("CA" -> "California", "CO" -> "Colorado")
res2: states.type = Map(CO -> Colorado, AZ -> Arizona, AL -> Alabama, CA -> California, AR -> Arkansas, AK -> Alaska)
Removing elements from a Map
You remove elements from a Map
using -=
and --=
and specifying the key values, as shown in the following examples:
states -= "AR"
states -= ("AL", "AZ")
states --= List("AL", "AZ")
The REPL shows how these examples work:
scala> states -= "AR"
res3: states.type = Map(CO -> Colorado, AZ -> Arizona, AL -> Alabama, CA -> California, AK -> Alaska)
scala> states -= ("AL", "AZ")
res4: states.type = Map(CO -> Colorado, CA -> California, AK -> Alaska)
scala> states --= List("AL", "AZ")
res5: states.type = Map(CO -> Colorado, CA -> California, AK -> Alaska)
Updating Map elements
You update Map
elements by reassigning their key to a new value:
states("AK") = "Alaska, A Really Big State"
The REPL shows the current Map
state:
scala> states("AK") = "Alaska, A Really Big State"
scala> states
res6: scala.collection.mutable.Map[String,String] = Map(CO -> Colorado, CA -> California, AK -> Alaska, A Really Big State)
Traversing a Map
There are several different ways to iterate over the elements in a map. Given a sample map:
val ratings = Map(
"Lady in the Water"-> 3.0,
"Snakes on a Plane"-> 4.0,
"You, Me and Dupree"-> 3.5
)
my preferred way to loop over all of the map elements is with this for
loop syntax:
for ((k,v) <- ratings) println(s"key: $k, value: $v")
Using a match
expression with the foreach
method is also very readable:
ratings.foreach {
case(movie, rating) => println(s"key: $movie, value: $rating")
}
The
ratings
map data in this example comes from the old-but-good book, Programming Collective Intelligence.
See also
There are other ways to work with Scala Maps, and a nice collection of Map classes for different needs. See the Scala Cookbook for many more examples.