2012-10-03 21 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

這可能會給你錯誤的訂單 –

相關問題