Pankaj Bagwan
Pankaj Bagwan
2 min read



Elixir v0.13 has introduced Maps, a key value store. Quoting elixir 0.13 docs

A Dict implementation that works on maps. Maps are key-value stores where keys are compared using the match operator (===). Maps can be created with the %{} special form defined in the Kernel.SpecialForms module.

Now just FYI, to use Maps, elixir branch v0.13 needs to be checked out and also we need to use erlang 17 rc 1. I am not going into details, but here are some useful information.

1.) Get and install erlang 17 rc 1. One can also use multiple release manager for erlang

2.) Get and install elixir v0.13 like

git fetch

git checkout v0.13

make clean #needed to clean old bin stuff otherwise there might be some errors


#although I dont prefer doing installation, i just copy binaries and use them to use multiple elixir at given time, but if you wish

make install
Defining a map

Let’s dive in, roll your sleeves and fire up iex

Erlang/OTP 17 [RELEASE CANDIDATE 2] [erts-6.0] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (0.13.0-dev) - press Ctrl+C to exit (type h() ENTER for help)

my_map = %{ name: "pankaj", age: 22, knows: ["a", "b", "c"] }
#=> %{age: 22, knows: ["a", "b", "c"], name: "pankaj"}

There is one other way to initialize or construct Map via new method, as explained below [{ :name, "pankaj"}, { :age, 22 }, { :knows, ["a", "b", "c"] }]
#=>  %{age: 22, knows: ["a", "b", "c"], name: "pankaj"}

#as well as we can define map ruby hash style with =>
my_map = %{ :name => "pankaj", :age => 22, :knows => ["a", "b", "c"] }
Accessing Map

Accessing map is pretty simple, like we see in other language (i.e ruby, javascript)

#ruby hash style
#=> 22

#other way json style
#=> "pankaj"

#yet another way
Map.get(my_map, :knows)
#=> ["a", "b", "c"]

Like wise updating, deleting and other operations go by Dict style

#=> [:age, :knows, :name]
#=> [22, ["a", "b", "c"], "pankaj"]

#updating a value
Map.put(my_map, :age, 21)
#=> %{age: 21, knows: ["a", "b", "c"], name: "pankaj"}

#deleting a value
Map.delete(my_map, :knows)
#=> %{age: 22, name: "pankaj"}

Maps implements most of Dict methods, one can look them in docs


Maps can be used as data model in modules using defstruct. Here is how

#define a module
defmodule Teenage do
  defstruct name: "", age: 15, knows: ["a", "b", "c"]

We can access it by

#accessing struct by
#=> %Teenage{age: 15, knows: ["a", "b", "c"], name: ""}

#or by

#=> %Teenage{age: 15, knows: ["a", "b", "c"], name: ""}

Manipulating struct are same as Maps

rambo = %Teenage{}
#=> 15

rambo = Map.put(rambo, :name, "Rambo")
#=> %Teenage{age: 15, knows: ["a", "b", "c"], name: "Rambo"}
#Notice we are reassigning rambo and it needs to be done

#getting type of struct

#=> Teenage

Disclaimer: Maps are hot changes, available only in elixir v0.13, they might change in future.

elixir programming :)

About The Author

I am Pankaj Baagwan, a System Design Architect. A Computer Scientist by heart, process enthusiast, and open source author/contributor/writer. Advocates Karma. Love working with cutting edge, fascinating, open source technologies.

  • To consult Pankaj Bagwan on System Design, Cyber Security and Application Development, SEO and SMO, please reach out at me[at]bagwanpankaj[dot]com

  • For promotion/advertisement of your services and products on this blog, please reach out at me[at]bagwanpankaj[dot]com

Stay tuned <3. Signing off for RAAM