我是Scala的新手,我希望以最快的方式获取文本文件中每个字符的出现次数的地图,我该怎么做?(我使用groupBy,但我认为它太慢了)
答案 0 :(得分:2)
我认为groupBy()
可能非常有效,但它只是收集元素,这意味着计算它们需要第二次遍历。
要在一次遍历中统计所有Char
,您可能需要这样的内容。
val tally = Array.ofDim[Long](127)
io.Source.fromFile("someFile.txt").foreach(tally(_) += 1)
Array
用于快速索引。索引是计算的字符。
tally('e') //res0: Long = 74
tally('x') //res1: Long = 1
答案 1 :(得分:0)
您可以执行以下操作:
首先阅读文件:
val lines = Source.fromFile("/Users/Al/.bash_profile").getLines.toSeq
然后,您可以编写一个方法,该方法将读取行列表并计算给定字符的出现次数:
def getCharCount(c: Char, lines: Seq[String]) = {
lines.foldLeft(0){(acc, elem) =>
elem.toSeq.count(_ == c) + acc
}
}