我有这样的结构:
map = %{"a" => "foo",
"b" => [%{"b1" => "bar",
"b2" => "baz"}]}
我想要的是:
map.b[0].b1
获得它的最简单方法是什么?
有没有办法使用kernerl.get_in/2
答案 0 :(得分:5)
是的,可以使用Kernel.get_in/2
和Access.at/1
的组合:
map = %{"a" => "foo",
"b" => [%{"b1" => "bar",
"b2" => "baz"}]}
get_in(map, ["b", Access.at(0), "b1"])
# => "bar"
答案 1 :(得分:2)
您将收到错误,因为地图的键是字符串,而不是原子,并且没有list[index]
语法。
你可以通过
获得它map["b"] |> Enum.at(0) |> Map.get("b1")
答案 2 :(得分:0)
你可以使用List.pop_at
map = %{"a" => "foo", "b" => [%{"b1" => "bar", "b2" => "baz"}]}
map["b"] |> List.pop_at(0) |> (fn({res, rest}) -> res end).()