You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir:如何在含非数字字符串的列表中统计奇数整数?

解决ListFilter处理非数字字符串报错的问题

原代码的问题在于String.to_integer/1遇到非数字字符串时会抛出异常,直接导致函数崩溃。我们需要先筛选出可以成功转换为整数的字符串,再统计其中奇数的数量。

修改后的代码(简洁版)

defmodule ListFilter do
  def call(list) do
    {
      :ok,
      list
      |> Enum.flat_map(fn str ->
        case String.to_integer(str) do
          {:ok, int} -> [int]
          :error -> []
        end
      end)
      |> Enum.filter(&(rem(&1, 2) == 1))
      |> Enum.count()
    }
  end

  def call() do
    {:error, "Its wrong!"}
  end
end

代码说明

  1. 使用Enum.flat_map遍历列表:
    • 对每个字符串尝试转换为整数,成功则返回包含该整数的列表,失败则返回空列表
    • 自动过滤掉无法转换的非数字字符串
  2. 后续流程和原代码一致:过滤奇数、统计数量

测试验证

  • 执行ListFilter.call(["1", "3", "6", "43","6"]),返回{:ok, 3},符合预期
  • 执行ListFilter.call(["1", "2", "3", "43", "abc", "banana", "6"]),返回{:ok, 3},不再报错

内容的提问来源于stack exchange,提问作者Fabio Alencar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:40:59