2017-06-20 65 views
2

獲得項目我有這樣的結構:靈藥 - 通過指數嵌套放

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

只要我想要得到的是:

map.b[0].b1 

是什麼讓最簡單的方法它?
有沒有辦法使用kernerl.get_in/2

回答

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" 
2

你會得到一個錯誤這樣做,因爲你的地圖的鍵是字符串,而不是原子,而且也沒有list[index]語法。

您可以通過

map["b"] |> Enum.at(0) |> Map.get("b1") 
0

可以使用List.pop_at map = %{"a" => "foo", "b" => [%{"b1" => "bar", "b2" => "baz"}]} map["b"] |> List.pop_at(0) |> (fn({res, rest}) -> res end).()