如何计算Scala中2d列表中元素的出现次数?

Joe*_*nes 0 scala

所以我有一个这样的列表:

val list = List(List(1,2,3),List(3,4,8),List(4,2,3))
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想要的输出如下所示:

Map(1 -> 1, 2 -> 1, 3 -> 3, 4 -> 2, 8 -> 1)
Run Code Online (Sandbox Code Playgroud)

如果列表是正常列表,我会这样做:

list.groupBy(identity).mapValues(_.size)
Run Code Online (Sandbox Code Playgroud)

达到预期的结果.那么,我如何为二维列表做到这一点?

Lui*_*rez 5

仅使用scala,可以展平第一个列表,然后应用相同的方法

list.flatten.groupBy(identity).mapValues(_.size) // Map(1 -> 1, 2 -> 2, 3 -> 3, 8 -> 1, 4 -> 2)
Run Code Online (Sandbox Code Playgroud)

或者使用Cats/Scalaz |+| (合并)运算符.

list.map(l => l.groupBy(identity).mapValues(_.size)).reduce(_ |+| _) //  Map(1 -> 1, 2 -> 2, 3 -> 3, 8 -> 1, 4 -> 2)
Run Code Online (Sandbox Code Playgroud)