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

如何在嵌套Enum调用中使用管道传递的列表作为Enum.count的参数

实现方案

方案1:使用then/2捕获管道中间值

管道输出的结果可以通过then/2绑定到变量,就能在内部的嵌套函数中直接调用:

def word_count(str) do
  String.downcase(str)
  |> String.split()
  |> then(fn word_list ->
    Enum.map(word_list, fn x -> Enum.count(word_list, &(&1 == x)) end)
  end)
end

注意:Enum.count/2的第二个参数为谓词函数,需要调整为匹配目标词的逻辑,不能直接传入待匹配的字符串。

方案2:提前赋值中间变量

也可以先把管道处理后的列表赋值给变量,再执行后续逻辑,可读性更高:

def word_count(str) do
  word_list = 
    str
    |> String.downcase()
    |> String.split()

  Enum.map(word_list, fn x -> Enum.count(word_list, &(&1 == x)) end)
end

优化建议

如果你的需求是统计每个单词的出现频次,当前嵌套遍历的写法时间复杂度为O(n²),列表较长时性能较差,可以直接用Elixir内置的Enum.frequencies/1实现,时间复杂度为O(n):

def word_count(str) do
  str
  |> String.downcase()
  |> String.split()
  |> Enum.frequencies()
end

返回结果为%{"单词1" => 计数1, "单词2" => 计数2}格式的映射,你可以根据需要再转换为列表格式。

内容的提问来源于stack exchange,提问作者Samuel Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 19:54:01