Scala计算Map中元素的出现次数

时间:2014-06-16 07:59:57

标签: scala

我如何计算地图中元素的出现次数?

例如

val myMap = Map("word1" -> "foo", "word3" -> "word4", "word5" -> "foo")

myMap contains "foo" count //???
// returns 2

3 个答案:

答案 0 :(得分:11)

您可以将count与谓词一起使用:

myMap.count({ case (k, v) => v == "word1" })

可替换地:

myMap.values.count(_ == "word1")

甚至:

myMap.count(_._2 == "word1") // _2 is the second tuple element

注意:这是值,而不是键。钥匙是独一无二的。

答案 1 :(得分:1)

通常,如果要计算Map中的出现次数,可以按值进行分组,然后将分组的子映射转换为其大小

scala> val occurrences = myMap groupBy ( _._2 ) mapValues ( _.size )
occurrences: scala.collection.immutable.Map[String,Int] = Map(word4 -> 1, foo -> 2)

如果您需要为每个条目计数,而不仅仅是单个值,这很方便。 否则@ Ven的解决方案更有效率

答案 2 :(得分:0)

另一种方式,

myMap.values.filter { _ == "foo" }.size