elixir - 在嵌套放大器中按索引获取项目

时间:2017-06-20 08:05:15

标签: elixir

我有这样的结构:

map =  %{"a" => "foo",
         "b" => [%{"b1" => "bar",
                   "b2" => "baz"}]}

我想要的是:

map.b[0].b1

获得它的最简单方法是什么? 有没有办法使用kernerl.get_in/2

来做到这一点

3 个答案:

答案 0 :(得分:5)

是的,可以使用Kernel.get_in/2Access.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).()