我有一个关于按列表元素的属性对列表进行分区的问题。
给定List[E]
和函数f(e: E): Int
如何将列表划分为List[List[E]]
,其中每个元素是List[E]
个元素,f
具有相同的值{ {1}}已应用?
例如假设类型E
表示物理位移,f
测量位移,导致整数大于或等于零。
val ms = List(a, b, c, d, e)
f(a) = 1
f(b) = 3
f(c) = 1
f(d) = 4
f(e) = 3
生成的分区将是
List(List(a, c), List(b, e), List(d))
此示例显示f
的值可以包含间隙,但列表列表不应包含任何空列表。
答案 0 :(得分:4)
如果您希望按功能值对列表进行排序:
list.groupBy(f).toList.sortBy(_._1).map(_._2)
答案 1 :(得分:2)
只需将它们分组:
val ms = List(a, b, c, d, e)
ms.groupBy(x => f(x)).values