我可以使用以下代码计算特定字符串
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})
最后一个代码有一些错误,有人可以帮我修复错误或提供正确的解决方案
答案 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
}
}