如何在 Scala 中打印数字的出现?

How to print occurrences of numbers in Scala?

我是 Scala 新手。 请帮助我获得预期的输出

    val list =List(1,123,2,3,123,1,2) 
    val result = aList.map(x => aList.count(_==x)))
    println(result.distinct)

预期输出:1 的出现次数为 2 2出现的次数是2 123出现的次数是2 3出现的次数是1

groupBy 对此效果很好。它 returns 由鉴别器函数分组的 Map 元素,在这种情况下是元素本身,也称为 identity

scala.collection.immutable.Map[Int,List[Int]] = HashMap(1 -> List(1, 1), 2 -> List(2, 2), 3 -> List(3), 123 -> List(123, 123))

我们可以从中工作。 然后将每个 key/value 对映射到一个键和值 List 中的 size,这会给出您要查找的内容。

list.groupBy(identity).map({case(k,v) => (k, v.size)})
scala.collection.immutable.Map[Int,Int] = HashMap(1 -> 2, 2 -> 2, 3 -> 1, 123 -> 2)

我们可以使用 Scala 2.13 groupMapReduce 正如 LuisMiguelMejíaSuárez 所说。

list.groupMapReduce(identity)(_ => 1)(_ + _)

类似于上面的方法,第一个参数被赋予identity函数来对值进行分组,第二个参数将每个值映射到1,第三个参数被赋予一个函数_ + _ 将它们加在一起。

这给出了与原始方法类似的答案: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2, 2 -> 2, 3 -> 1, 123 -> 2)