Scala在hashmap中更新/创建值

时间:2012-10-12 21:10:07

标签: scala hashmap

我对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循环错了吗? 是否有更漂亮的方式来写它?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果有人想知道如何使用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)