所以我有一个这样的列表:
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)
达到预期的结果.那么,我如何为二维列表做到这一点?
仅使用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)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |