Elixir 计算条件满足时出现的次数

1 enums elixir

我尝试在 Elixir 中做以下可以在 Python 中实现的事情:

sum = 0
for elem in list:
  if elem >= 5:
    sum += 1
Run Code Online (Sandbox Code Playgroud)

例如:我要返回号码3给定列表的数字[0, 5, 8, 3, 10]

这就是我在 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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:** (ArithmeticError) bad argument in arithmetic expression: nil + 1

编辑:

找到了!问题是当 x < 5 时我没有返回任何值,导致没有值传递给acc因此accis 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
Run Code Online (Sandbox Code Playgroud)

zwi*_*pie 6

在reduce函数中,你忘记告诉当数字为5或更少时要做什么:

list = [0, 5, 8, 3, 10]
Enum.reduce(list, 0, fn num, acc -> if num >= 5, do: acc + 1, else: acc end)
Run Code Online (Sandbox Code Playgroud)

甚至更简单Enum.count/2

Enum.count(list, & &1 >= 5)
Run Code Online (Sandbox Code Playgroud)