斯卡拉。如何使用scala计算第一个数组的数组

时间:2018-04-03 05:00:27

标签: scala

我有一个文件,单词用*分隔,行用〜分隔,我想计算具体单词在文件中出现的次数。

例如。

输入文件:

AB*xyz*1234~
CD*mny*769~
MN*bvd*2345~
AB*zar*987~

代码:

for (line <- bufferedSource.getLines()) {
      array = line.split("\\~")

for (row <- array ){
      val splittedRow=row.split("\\*")
      val cnt = splittedRow(0).contains("AB").count()

这里我面临的问题是,AB这个词有多少次出现。你能帮我解决一下如何从数组中获取特定单词的数量。我无法使用关键字.count。

请帮帮我。

3 个答案:

答案 0 :(得分:1)

我为你的案子做了一个小功能:

def count(term:String,file:File): Int = {
    Source.fromFile(file, "UTF-8").getLines().foldRight(0)((line, count) => {
        count + line.split("\\*").filter(_.contentEquals(term)).length
    })
}

println(count("AB",PATH_TO_INPUT)) // result is 2

所有行都会检查是否有分隔符,过滤单词列表到术语,并将剩余单词的长度添加到当前计数值。

this帮助我理解折叠方法

我希望能回答你的问题

答案 1 :(得分:0)

arr.map(_.split("\\*")).count(i => i.headOption.exists(_.contains("AB")))
<{1}} count函数与第一个元素并使用contains来处理Option

答案 2 :(得分:0)

  

问题在于,单词AB存在多少次。你能帮我解决一下如何从数组中获取特定单词的数量

您可以使用Source api阅读该文件,然后将分隔的单词存储在列表中

val resultArray = Source.fromFile(filename).getLines().flatMap(line => line.replace("~", "").split("\\*")).toList

您可以通过调用计数功能来计算每个单词的重复次数

println(resultArray.count(_ == "AB"))   //will print 2
println(resultArray.count(_ == "CD"))   //will print 1
println(resultArray.count(_ == "xyz"))  //will print 1

我希望答案很有帮助