2013-01-04 1 views
1

У меня есть список и вы хотите использовать его для создания трех списков. Я могу сделать это при двух применениях фильтра:fold, который создает кортеж (избегая множественных обходов ввода)

val z_out = zs.filter(p1) 
val z_in = zs.filter(p2) 
val z_split = zs.diff(z_out union z_in) 

Могу ли я сделать это одним обходным списком? Как и в:

val (z_out, z_in, z_split) = zs.foldLeft(...) 

ответ

1

Вы можете, до тех пор, как результат складки кортеж:

scala> val (a,b,c) = Nil.foldLeft((1,2,3))((x,y) => x) 
a: Int = 1 
b: Int = 2 
c: Int = 3 
+0

http://stackoverflow.com/questions/1701001/fold-list-of-tuples- in-scala-with-destructuring? rq = 1 –

+0

@SergeyPassichenko, вопрос, который вы указали, касается использования кортежей в аргументах сгиба, а не в возврате. – pedrofurla

+0

jaybee спросил об этом, но удалил комментарий позже :) –