我有一个简单的Scala代码.我循环遍历一个字符串列表,我想计算每个字符串的出现,我收集为列表r中的元组(String,Int).主函数中的部分应该保留(所以没有groupBy或者什么).我的问题是关于更新功能:
现在我先做一个find,然后在r中添加一个新元组,如果它不存在的话.如果确实存在,我循环遍历r并更新匹配String的计数器.
可以修改更新功能,以便更有效吗?可以在一次迭代中更新(如果它不存在则添加,如果它存在则更新计数器)?
谢谢
var r = List[(String, Int)]() // (string, count)
def update(s: String, l: List[(String, Int)]) : List[(String, Int)] = {
if (r.find(a => a._1 == s) == None) {
(s, 1) :: r // add a new item if it does not exist
} else {
for (b <- l) yield {
if (b._1 == s) {
(b._1, b._2 + 1) // update counter if exists
} else {
b // just yield if no match
}
}
}
}
def main(args : Array[String]) : Unit = {
val l = "A" :: "B" :: "A" :: "C" :: "A" :: "B" :: Nil
for (s <- l) r = update(s, r)
r foreach println
}
Run Code Online (Sandbox Code Playgroud)
Hei*_*ger 22
我建议你去寻找功能风格并使用Scala集合的强大功能:
ss.groupBy(identity).mapValues(_.size)
Run Code Online (Sandbox Code Playgroud)