2013-07-21 35 views
1

在Scala中執行以下操作有一種簡單而有效的方法嗎?將匹配和不匹配的元素過濾到元組的不同半部分

val elements = List(1, 2, 3, 4, 5, 6) 
val (odd, even) = elements.filter(_ % 2 == 0) 

我知道groupBy,但我想的東西,以恆定的數字,可以提取到單獨的值組的工作。

+0

我認爲當「組」數量大於2時(當有兩個「分區」,因爲gzm0指出是最佳解決方案),基於元組的解決方案沒有任何特別的優勢。請記住'TupleNN'的'NN'限於22(到目前爲止)。如果你的組數多於這個組,你就沒有選擇,只能使用'groupBy'。 –

回答

5

List.partition你想要做什麼:

val (even, odd) = elements.partition(_ % 2 == 0) 

請注意,它僅適用於最後兩組。

+0

太棒了 - *究竟*我需要什麼! –

+0

@LawrenceWagerfield分區是Odersky的基本原因,爲什麼是斯卡拉的一個很好的例子,請參見http://www.slideshare.net/marakana/martin-odersky-whats-next-for-scala slide#9另見近期關於略有不同使用案例的ML討論https://groups.google.com/forum/#!topic/scala-debate/cHwgchiSdP0 –