Gibt es ein Elixir gleichwertig für Hash#Dig in Ruby?Elixir Karte Dig Funktionalität wie Ruby Hash # Dig
Rubin graben Beispiel
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil
Gibt es ein Elixir gleichwertig für Hash#Dig in Ruby?Elixir Karte Dig Funktionalität wie Ruby Hash # Dig
Rubin graben Beispiel
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil
Verwendung 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
get_in
arbeitet mit Karten in Ordnung. Um etwas zu erstellen, das sowohl mit Karten als auch mit Strukturen funktioniert, müssen Sie es selbst erstellen:
def dig(nil, _), do: nil
def dig(struct, []), do: struct
def dig(struct, [head | tail]) do
struct
|> Map.get(head)
|> dig(tail)
end
> m = %{foo: %{bar: %{baz: 1}}}
> dig m, [:foo, :bar, :baz]
1
> dig m, [:foo, :zot]
nil
> dig m, [:foo, :zot, :qux]
nil