3

Scala hasmapsでこれを理解していません:値が存在しない場合、値を作成または更新するにはどうすればよいですか?

文字列のリストの文字数を数えようとしています。

私はこのコードを試しましたが、機能しません:

 def times(chars: List[Char]): List[(Char, Int)] = {
     val map = new HashMap[Char, Int]()
     chars.foreach(
        (c : Char) => {
           map.update(c, map.get(c) + 1)
        })
 } 

返されるタイプが正しくないことを理解しています。しかし、私のforeachループは間違っていますか?それを書くためのより良い方法はありますか?

4

2 に答える 2

3

私はこれがあなたの質問に答えると思います:

scala> "abaccdba".groupBy(identity).mapValues(_.length)
res3: scala.collection.immutable.Map[Char,Int] = Map(b -> 2, d -> 1, a -> 3, c -> 2)

ああ、ところで、あなたの元の質問に関してHashMapは方法がありますgetOrElseUpdate

于 2012-10-12T21:31:24.643 に答える
1

誰かがGetOrElseUpdateの使用方法を知り、この投稿を見つける場合は、ここに私が見つけた例があります:

val map = Map('a' -> 1, 'b' -> 2)         //> map  :  
scala.collection.immutable.Map[Char,Int] = Map(a -> 1, b -> 2)
val newval = map.getOrElse('b', 0) + 1      //> newval  : Int = 3
val updated = map + ('b' -> (newval))        //> updated  : 
scala.collection.immutable.Map[Char,Int] = Map(a -> 1, b -> 3)
于 2012-10-13T00:21:53.927 に答える