Elixir:如何按键过滤地图

Ole*_*ann 10 elixir

我有一个带有键值对的Map和一个带有原子的元组.我想删除地图中的任何条目,其中键不是元组中的原子

m = %{value1: nil, value2: nil, value4: nil}
t = {:value1, :value3, :value4}
# The result should be %{value1: nil, value4: nil}
Run Code Online (Sandbox Code Playgroud)

这是一种交叉问题.我调查了一下Enum.filter,MapSet但没有找到一个优雅的解决方案.这必须是一个常见问题,您的意见得到高度赞赏.

Dog*_*ert 16

使用Map.take/2Tuple.to_list/1:

iex(1)> m = %{value1: nil, value2: nil, value4: nil}
%{value1: nil, value2: nil, value4: nil}
iex(2)> t = {:value1, :value3, :value4}
{:value1, :value3, :value4}
iex(3)> Map.take(m, Tuple.to_list(t))
%{value1: nil, value4: nil}
Run Code Online (Sandbox Code Playgroud)