Pattern Matching and Updating Maps

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

  • Is there an entry with the key :name?

  • Are there entries for the keys :name and :height?

  • Does the entry with key :name have the value "Dave"?

Here’s how we ask these questions using Elixir patterns.

 
iex>​ person = %{ name: ​"Dave"​, height: 1.88 }
 
%{height: 1.88, name: ​"Dave"​}​​
 
iex>​ %{ name: a_name } = person
 
%{height: 1.88, name: ​"Dave"​}​​
 
iex>​ a_name
 
"Dave"​​​
 
iex>​ %{ name: _, height: _ } = person
 
%{height: 1.88, name: ​"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>​ %{ ...

Get Programming Elixir 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.