2016-06-07 113 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是的,謝謝) –

相關問題