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