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

时间:2016-04-24 12:08:03

标签: 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)

以上没有用,因为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)

1 个答案:

答案 0 :(得分:7)

尝试Enum.all?/2

required_keys |> Enum.all?(&(Map.has_key?(map_to_check, &1)))
相关问题