【问题标题】:Count number of Ints in Scala list using a fold使用折叠计算 Scala 列表中的 Int 数
【发布时间】:2015-03-23 18:19:19
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: scala fold


    【解决方案1】:

    另一个版本:

    list.count(_.isInstanceOf[Int])
    

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

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

    【讨论】:

      【解决方案2】:

      通过Int 过滤list 并采用size 可以满足您的需求,而且非常简单。

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

      【讨论】:

      • 谢谢,这很简单,但我试图通过专门使用折叠来更好地理解它是如何工作的(或者看看它是否可能)。
      • 你可以结合上面的两个答案:list.filter(.isInstanceOf[Int]).foldLeft(0)((sum,) => sum + 1)
      猜你喜欢
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多