如何按每个元素的属性对List进行分区

时间:2012-10-03 20:35:38

标签: scala partitioning

我有一个关于按列表元素的属性对列表进行分区的问题。

给定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的值可以包含间隙,但列表列表不应包含任何空列表。

2 个答案:

答案 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