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 回答