使用Elixir中的模式匹配获取特定键和地图的其余部分

时间:2018-06-05 14:54:52

标签: dictionary pattern-matching elixir

我试图通过模式匹配来获取一个元素和地图的其余部分,但我只会遇到编译错误。

我想出了这个:

%{“One” => one | tail} = %{“One" => 1, "Three" => 3, "Two" => 2}

但我收到编译错误,说它是预期的键值对。

我试图实现的行为是:

%{“One” => one | tail} = %{“One" => 1, "Three" => 3, "Two" => 2}
one = 1
tail = %{"Three" => 3, "Two" => 2}

在灵药中,有一种方法可以完成吗?

1 个答案:

答案 0 :(得分:0)

从版本1.6开始,Elixir中没有此语法,但如果您只想一次从地图中删除一个值,则可以使用Map.pop/2

iex(1)> {one, tail} = Map.pop(%{"One" => 1, "Three" => 3, "Two" => 2}, "One")
{1, %{"Three" => 3, "Two" => 2}}
iex(2)> one
1
iex(3)> tail
%{"Three" => 3, "Two" => 2}