3

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

给定一个List[E]和一个函数f(e: E): Int,如何将列表划分为一个List[List[E]],其中每个元素都是在应用List[E]时具有相同值的元素中的一个f

例如,假设 typeE表示物理位移并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可以包含间隙,但列表列表不应包含任何空列表。

4

2 回答 2

4

如果您希望列表按函数值排序:

list.groupBy(f).toList.sortBy(_._1).map(_._2)
于 2012-10-03T20:44:06.220 回答
2

只需将它们分组:

val ms = List(a, b, c, d, e)
ms.groupBy(x => f(x)).values
于 2012-10-03T20:41:54.197 回答