Efficientley计算文件中每个字符的出现次数 - scala

时间:2018-01-17 18:23:05

标签: scala

我是Scala的新手,我希望以最快的方式获取文本文件中每个字符的出现次数的地图,我该怎么做?(我使用groupBy,但我认为它太慢了)

2 个答案:

答案 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
    }
  }