elixir

Elixir map dig functionality like Ruby Hash#Dig


Is there an Elixir equivalent for Hash#Dig in Ruby ?

Ruby dig example

h = { foo: {bar: {baz: 1}}}

h.dig(:foo, :bar, :baz)           #=> 1
h.dig(:foo, :zot)                 #=> nil

Solution

  • Use Kernel.get_in/2:

    iex(1)> m = %{foo: %{bar: %{baz: 1}}}
    %{foo: %{bar: %{baz: 1}}}
    iex(2)> get_in m, [:foo, :bar, :baz]
    1
    iex(3)> get_in m, [:foo, :zot]
    nil