说我有以下类型Any列表:
val list = List("foo", 1, "bar", 2)
我现在想编写一个函数,只使用折叠计算列表中的Ints数。在上面列表的情况下,结果应为“2”。
我知道使用fold计算所有元素的数量会是这样的:
def count(list: List[Any]): Int =
list.foldLeft(0)((sum,_) => sum + 1)
如何调整此值以仅计算Int的出现次数?
答案 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