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
相关产品推荐
相关产品推荐

