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

时间:2015-03-23 18:19:19

标签: scala fold

说我有以下类型Any列表:

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

我现在想编写一个函数,只使用折叠计算列表中的Ints数。在上面列表的情况下,结果应为“2”。

我知道使用fold计算所有元素的数量会是这样的:

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

如何调整此值以仅计算Int的出现次数?

2 个答案:

答案 0 :(得分:10)

另一个版本:

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 :(得分:1)

list过滤Int并取size即可获得您想要的内容,而且相当简单。

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