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

问题描述 投票:1回答:1

我是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。

list scala count distinct-values find-occurrences
1个回答
2
投票

groupBy 很好用。它返回一个 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))

然后将每个键值对映射到一个键和 size 价值的 List 它提供了您所需要的东西。

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)

© www.soinside.com 2019 - 2024. All rights reserved.