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

时间:2018-11-18 21:24:22

标签: scala

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

val list = List(List(1,2,3),List(3,4,8),List(4,2,3))

在上述情况下,我想要的输出如下所示:

Map(1 -> 1, 2 -> 1, 3 -> 3, 4 -> 2, 8 -> 1)

如果列表是普通列表,我会这样做:

list.groupBy(identity).mapValues(_.size)

达到预期结果。那么,如何针对二维列表执行此操作?

1 个答案:

答案 0 :(得分:5)

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

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

或使用 Cat / Scalaz |+| (合并)运算符。

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