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

Scala如何实现统计列表中指定元素出现次数的函数

在Scala中实现统计列表元素出现次数的函数

嘿,这个需求其实有好几种实用的实现方式,我给你列几个常用的,从基础的递归写法到简洁的标准库调用都包含在内:

1. 基础递归实现

这是函数式编程里最经典的思路,利用列表的递归结构来逐步处理:

def count(target: Int, list: List[Int]): Int = list match {
  case Nil => 0  // 空列表直接返回0,终止递归
  case head :: tail if head == target => 1 + count(target, tail)  // 头元素匹配目标,加1后递归处理剩余列表
  case _ :: tail => count(target, tail)  // 不匹配就直接递归处理剩余列表
}

调用你给出的测试用例:count(2, List(2, 4, 5, 2, 2, 7)),会返回3,完全符合预期。

2. 利用Scala标准库的count方法

其实Scala的List本身就自带了count方法,专门用来统计满足条件的元素数量,我们可以直接复用它,一行代码就能搞定:

def count(target: Int, list: List[Int]): Int = list.count(_ == target)

这个方法内部已经封装了高效的统计逻辑,日常开发里最推荐用这种简洁的写法。

3. 用foldLeft累加实现

foldLeft是函数式编程里常用的累加工具,我们可以用它维护一个计数器,遍历列表时动态更新计数器的值:

def count(target: Int, list: List[Int]): Int = 
  list.foldLeft(0) { (acc, num) =>
    if (num == target) acc + 1 else acc
  }

初始累加值设为0,每遍历一个元素,如果等于目标值就把累加器加1,否则保持原值,最后返回累加器的最终结果。

这几种方式都能完美实现你要的功能,根据自己的场景和习惯选择就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:23:02