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

如何在Erlang中实现has_common_element函数检测两列表是否有公共元素

实现Erlang的has_common_element函数

刚好之前也处理过类似的需求,咱们可以利用Erlang标准库的工具轻松实现这个函数,下面给你两种常见的实现方式:

基础实现:直接遍历检查

最直观的思路就是遍历其中一个列表的每一个元素,用lists:member/2检查它是否存在于另一个列表中。只要找到第一个公共元素,就可以立刻返回true,不用继续遍历——这里可以用lists:any/2来帮我们做这件事,它会在找到第一个满足条件的元素时就停止遍历,效率还不错:

has_common_element(List1, List2) ->
    lists:any(fun(Element) -> lists:member(Element, List2) end, List1).

测试一下你的例子:

  • has_common_element([1,2,3], [4,5,6]) → 返回false,符合预期
  • has_common_element([1,2,3], [1,7,8]) → 返回true,因为元素1在两个列表里都存在

优化版:用集合提升性能

如果你的列表比较大,上面的基础实现时间复杂度是O(m*n)(m和n是两个列表的长度),可能会有点慢。这时候可以把其中一个列表转换成集合,集合的成员检查是O(1)的操作,能把总时间复杂度降到O(m + n):

has_common_element(List1, List2) ->
    % 把第一个列表转成集合,减少后续查找的时间
    ElementSet = sets:from_list(List1),
    lists:any(fun(Element) -> sets:is_element(Element, ElementSet) end, List2).

这个版本在处理大列表的时候优势会很明显,当然如果你的列表本来就很小,两种方式的差异不大,选哪个都可以。

另外要注意,不管列表里有没有重复元素,这两个实现都能正常工作——咱们只需要确认是否存在至少一个公共元素,重复元素不会影响结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:51:41