技术问询:统计列表中键的数量及'test'键出现次数的惯用方法
让我来一步步帮你解决这两个问题~
问题1:统计列表中包含的键的总数
这里分两种场景,你可以根据需求选择:
- 统计所有出现的键的总次数(包括不同map里重复的键):
先把每个map的键都提取出来拼成一个列表,再统计长度即可:list = [%{"test" => 1}, %{"test" => 3}, %{"test2" => 1}] total_key_count = list |> Enum.flat_map(&Map.keys/1) |> length() # 结果:3(对应三个键:"test", "test", "test2") - 统计去重后的唯一键数量:
在上面的基础上加上去重步骤就行:unique_key_count = list |> Enum.flat_map(&Map.keys/1) |> Enum.uniq() |> length() # 结果:2(唯一键是"test"和"test2")
问题2:用函数式方法统计'test'键的出现次数
函数式风格里,Enum.count/2就是最适合的工具!它不需要你手动维护计数器,直接传入列表和判断逻辑就行:
list = [%{"test" => 1}, %{"test" => 3}, %{"test2" => 1}] test_key_count = Enum.count(list, fn map -> Map.has_key?(map, "test") end) # 结果:2(前两个map都包含"test"键)
这个写法完全是无副作用的函数式风格,比用Enum.each或者for循环手动计数简洁优雅太多啦~
内容的提问来源于stack exchange,提问作者lapinkoira
相关产品推荐
相关产品推荐

