我有两个清单:
val l1 = List(1, 2, 3, 4)
val l2 = List(true, false, true, true)
基于l1
过滤l2
是否有简短的方法?
ris = List(1, 3, 4)
答案 0 :(得分:6)
稍短一些:
list1.zip(list2).collect { case (x, true) => x }
答案 1 :(得分:2)
一种方法可能是压缩然后过滤 l1.zip(l2).filter(_._ 2).map(_._ 1)
:
<代码>阶&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