Scala - 计算字符串中的特定字符(以函数样式)

时间:2018-04-12 10:05:58

标签: scala functional-programming

我可以使用以下代码计算特定字符串

 var count = 0
for (i <- "HelloWorldHHHH") {
if (i == 'H') {
  count = count + 1
}
println(count)

或使用内置类似

"HelloWorldHHHH".count(_ == 'H')

有人可以帮助我使用纯粹的功能方式编写相同的功能

我试过以下,但不知道我哪里出错了

val count1 = "Hello".foldLeft(0)((x,_) match { case k if(k == 'h') => x +1})

最后一个代码有一些错误,有人可以帮我修复错误或提供正确的解决方案

3 个答案:

答案 0 :(得分:3)

"HelloWorldHHHH".count(_ == 'H')已经是纯粹的功能风格,它似乎是我的首选,因为它非常简短易读。

更多选项:

<强>折叠

"HelloWorldHHHH".foldLeft(0){case(count, char) => if (char == 'H') count + 1 else count }

在理解之后总结。注意你可以使用警卫(如果):

val hs = for {
  i <- "HelloWorldHHHH"
  if i == 'H'
} yield 1
hs.sum

<强>收集

"HelloWorldHHHH".collect{ case 'H' => 1 }.sum

答案 1 :(得分:2)

如果你真的想在生产代码中这样做,我建议使用stdlib count方法:

"HelloWorldHHHH".count(_ == 'H')

出于学习目的,您可以使用foldLeft

自行学习
"HelloWorldHHHH".foldLeft(0) { case (sum, char) =>
  if (char == 'H') sum + 1 else sum
}

答案 2 :(得分:1)

您可以删除if并将您的角色插入案例块

"Hello".foldLeft(0) {(acc,c) => c match {
    case 'l' => acc + 1
    case _ => acc
  }
}