scala根据另一个列表的值过滤列表

时间:2016-01-03 00:20:39

标签: list scala filter

我有两个清单:

val l1 = List(1, 2, 3, 4)
val l2 = List(true, false, true, true)

基于l1过滤l2是否有简短的方法?

ris = List(1, 3, 4)

3 个答案:

答案 0 :(得分:6)

稍短一些:

list1.zip(list2).collect { case (x, true) => x }

答案 1 :(得分:2)

一种方法可能是压缩然后过滤 l1.zip(l2).filter(_._ 2).map(_._ 1)


&#xA ;
 <代码>阶&GT; l1.zip(l2)&#xA; res0:List [(Int,Boolean)] = List((1,true),(2,false),(3,true),(4,true))&#xA ;&#XA;阶&GT; .filter(_._ 2)&#xA; res1:List [(Int,Boolean)] = List((1,true),(3,true),(4,true))&#xA;&#xA;阶&GT; .map(_._ 1)&#xA; res2:List [Int] = List(1,3,4)&#xA;  
&#xA;

答案 2 :(得分:0)

使用for desrehears to desugars into flatMap and withFilter(lazy filtering),像这样,

for ( (a,b) <- l1.zip(l2) if b ) yield a