如何在Elixir中统计满足条件的元素出现次数?
在Elixir中实现统计列表中≥5元素个数的功能
需求
需要实现如下Python代码的功能:
sum = 0 for elem in list: if elem >= 5: sum += 1
示例:给定列表 [0, 5, 8, 3, 10],预期返回3。
初始错误代码
我编写了以下Elixir代码,但无法正常运行:
cond do Enum.empty?(list) -> 0 length(list) == 1 -> if List.first(list) >= 5 do 1 else 0 end true -> Enum.reduce(list, 0, fn x, acc -> if x >= 5 do acc + 1 end end) end end
报错信息
运行后出现错误:
** (ArithmeticError) bad argument in arithmetic expression: nil + 1
问题排查与修复
找到问题了!
问题根源:当x < 5时,if表达式没有返回任何值,导致累加器acc接收不到有效值,最终变为nil,引发算术运算错误。
修正后的可运行代码:
cond do Enum.empty?(list) -> 0 length(list) == 1 -> if List.first(list) >= 5 do 1 else 0 end true -> Enum.reduce(list, 0, fn x, acc -> if x >= 5 do acc + 1 else acc + 0 end end) end end
内容的提问来源于stack exchange,提问作者Alice
相关产品推荐
相关产品推荐

