所以我有一个这样的列表:
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)
达到预期结果。那么,如何针对二维列表执行此操作?
答案 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)