2016-12-01 45 views
0

我編寫函數來計算字符串中每個字符的出現次數,例如「aadb a」,它應該返回a-> 3,d-> 1, b-> 1,地圖大小應該是3,但現在是錯的該映射不會重置密鑰的值

下面是我的代碼:我可以知道問題嗎?

def checkPalindrome(str:String): Int={ 
    str.foldLeft(HashMap.empty[Char, Int]){(map, char)=> (char) match{ 
    case ' '=>map 
    case _ => map+(char -> (map.getOrElse(char, 0) + 1)) 
    } 
    }.size 
} 
+0

你的代碼工作正常。在我運行它之前,我只需在頂部添加'import scala.collection.immutable.HashMap'。 – jwvh

回答

0

我剛剛將HashMap更改爲Map,它給了我正確的結果,正如您期望的那樣!

scala> 

scala> def checkPalindrome(str:String): Int={ 
    | str.foldLeft(Map.empty[Char, Int]){(map, char)=> (char) match{ 
    |  case ' '=>map 
    |  case _ => map+(char -> (map.getOrElse(char, 0) + 1)) 
    | } 
    | }.size 
    | } 
checkPalindrome: (str: String)Int 

scala> checkPalindrome("aadb a") 
res6: Int = 3 
+0

我可以知道爲什麼Hashmap有問題,謝謝 – sweetyBaby

+0

哪一個是java.util.HashMap或scala.collection.mutable.HashMap? –

0
"aadb a".toCharArray.filterNot(_ ==' ').groupBy(c=>c).map{case (c ,ca) => c -> ca.length } 
+0

嗨,我可以知道groupby(c => c)是什麼意思?謝謝 – sweetyBaby

+0

由每個char實例組成的(c:Char => c)或{case c:Char => c} group的簡寫,它給出了每個實例的char和數組(然後您可以映射並返回大小) –

+0

Wolud't'groupBy(identity)'更清楚嗎? – Haspemulator