使用fold函数计算Scala列表中的整数数量

4

假设我有以下类型为 Any 的列表:

val list = List("foo", 1, "bar", 2)

我现在想写一个函数,使用fold来仅计算列表中整数的数量。对于上面的列表,结果应该是“2”。
我知道使用fold计算所有元素的数量应该像这样:
def count(list: List[Any]): Int =
  list.foldLeft(0)((sum,_) => sum + 1)

我该如何调整这个代码,只统计 Int 出现的次数?

2个回答

11

另一版本:

list.count(_.isInstanceOf[Int])

如果你坚持使用foldLeft版本,这里有一个:

def count(list: List[Any]): Int =
  list.foldLeft(0)((sum, x) => x match {
    case _: Int => sum + 1
    case _ => sum
  })

1
通过对 Int 进行过滤并获取 list 的大小,可以得到您想要的结果,这相当简单。
scala> list.filter(_.isInstanceOf[Int]).size
res0: Int = 2

谢谢,这很简单,但我正在尝试更好地理解如何使用fold来实现它(或者看看是否可能)。 - fia928
1
你可以将上面两个答案结合起来:list.filter(.isInstanceOf[Int]).foldLeft(0)((sum,) => sum + 1) - experquisite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接