2016-06-07 112 views
1

示例代码计算在给定的输入文件中的每个词的出现:如何在scala.collection.mutable.HashMap中使用getOrElseUpdate?

object Main { 
    def main(args: Array[String]) { 
    val counts = new scala.collection.mutable.HashMap[String, Int] 
    val in = new Scanner(new File("input.txt")) 

    while (in.hasNext()) { 
     val s: String = in.next() 
     counts(s) = counts.getOrElse(s, 0) + 1 // Here! 
    } 

    print(counts) 
    } 
} 

能否与突出显示的注释行使用getOrElseUpdate方法被改写?

P.S.我只是在“不耐烦的斯卡拉”的第四部分,所以请现在不要教我关于功能斯卡拉,我相信,在这里可以更美丽。

谢谢。

+0

代码的意图是什么?要计算文本文件中的字符数? –

回答

0

如果你看一下doc,你会看到下一个:

如果给定的密钥已经在这张地图上,返回关联值。 否则,计算来自给定表达式op的值,存储键为 的地图并返回该值。

,但是无论如何你需要修改地图,所以getOrElseUpdate在这里没用。

您可以定义default值,如果不存在,将返回值。并用下一个方法:

import scala.collection.mutable.HashMap 
object Main { 
    def main(args: Array[String]) { 
    val counts = HashMap[String, Int]().withDefaultValue(0) 
    val in = new Scanner(new File("input.txt")) 

    while (in.hasNext()) { 
     val s: String = in.next() 
     counts(s) += 1 
    } 

    print(counts) 
    } 
} 
+1

不错的方法,但你必须在'val counts = HashMap [String,Int]()。withDefaultValue(0)后加上括号' – Dmitrii

+0

@Dmitrii是的,谢谢) –

相关问题