Elixir检查地图是否包含密钥列表

dns*_*hio 5 elixir

required_keys = [ "a", "b", "c" ]

map_to_check = %{ "x" => "foo", "y" => "bar", "z" => "baz" }

给定上面的required_keys列表和map_to_check映射,如何轻松测试map_to_check是否包含Elixir中required_keys列表中找到的所有键?

我知道我可以使用Map.has_key?(map_to_check, "a")检查是否存在一个值.

并尝试迭代required_keys给了我一个错误,因为我正在使用Enum.map,如下所示:

Enum.map(required_keys, fn k -> Map.has_key?(Map.keys(map_to_check), k) end)
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用,因为Enum.map不会迭代列表.

编辑

从查看答案,我注意到我的解决方案不起作用的原因不是因为Enum.map无法迭代列表,而是因为我Map.has_key?通过调用传入列表来实现Map.keys(map_to_check)

所以以下替代方案也应该有效:

Enum.map(required_keys, fn k -> Map.has_key?(map_to_check, k) end)
Run Code Online (Sandbox Code Playgroud)

ros*_*sta 9

试试Enum.all?/2:

required_keys |> Enum.all?(&(Map.has_key?(map_to_check, &1)))
Run Code Online (Sandbox Code Playgroud)