使用折叠计算 Scala 列表中的 Int 数

Count number of Ints in Scala list using a fold

假设我有以下任意类型的列表:

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

我现在想编写一个函数,使用折叠仅计算列表中的 Int 数。在上面的列表中,结果应该是“2”。

我知道使用 fold 计算所有元素的数量看起来像这样:

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

我如何调整它以仅计算 Int 的出现次数?

通过 Int 筛选 list 并采用 size 可以满足您的需求,而且相当简单。

scala> list.filter(_.isInstanceOf[Int]).size
res0: Int = 2

另一个版本:

list.count(_.isInstanceOf[Int])

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

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