2012-10-03 24 views
3

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

给定一个List[E]和功能f(e: E): Int如何可以将列表被划分成List[List[E]]其中当施加f每个元素是具有相同值的元素的一个List[E]

例如,假设类型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的值可以包括但间隙列表的列表不应包含任何空列表。

回答

4

如果你想通过函数值来排序列表:

list.groupBy(f).toList.sortBy(_._1).map(_._2) 
+0

这解决了我的问题。谢谢。 –

2

只是它们分组:

val ms = List(a, b, c, d, e) 
ms.groupBy(x => f(x)).values 
+3

甚至更​​地道:'ms.groupBy(F).values' –

+0

使其成为一个实际列表之一将不得不添加一个.toList –

+1

这可能会给你错误的订单 –

相关问题