Pattern Matching and Updating Maps

The question we most often ask of our maps is, “Do you have the following keys (and maybe values)?” For example, given the map:

 person = %{ ​name:​ ​"​​Dave"​, ​height:​ 1.88 }
  • Is there an entry with the key :name?

     iex>​ %{ ​name:​ a_name } = person
     %{height: 1.88, name: "Dave"}
     iex>​ a_name
     "Dave"
  • Are there entries for the keys :name and :height?

     iex>​ %{ ​name:​ _, ​height:​ _ } = person
     %{height: 1.88, name: "Dave"}
  • Does the entry with key :name have the value "Dave"?

     iex>​ %{ ​name:​ ​"​​Dave"​ } = person
     %{height: 1.88, name: "Dave"}

Our map does not have the key :weight, so the following pattern match fails:

 iex>​ %{ ​name:​ _, ​weight:​ _ } = person
 **​ (MatchError) no match of right ...

Get Programming Elixir 1.3 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.