2013-05-23 2 views
2

내가 구성 목록과 같은 역할을하는 부울 값이있는 목록과 일부 기능이있는 목록이 있고 크기가 동일하다고 가정 해 보겠습니다.Scalaz를 사용하는 부울 목록으로 필터 목록

val conf = List(true, false, true) 
val funcs = List(f1, f2, f3) 

는 그리고 병합하여, 그 결과는해야 다음과 같습니다

val res = List(f1, f3) 

나는이 Scalaz에서 실용적 빌더와 함께 할 수 있다는 것을 확신합니다.

답변

3

나는 Scalaz없이 그것을 해결하는 것은 매우 정직하고 있음을주의해야합니다

scala> val a = List(true, false, true) 
a: List[Boolean] = List(true, false, true) 

scala> val b = List(1,2,3) 
b: List[Int] = List(1, 2, 3) 

scala> a.view.zip(b).filter(_._1).map(_._2).force 
res3: Seq[Int] = List(1, 3) 
+0

'(A, B) .zipped.collect {경우 (a, b)는이 => B 경우}'많이 보인다 좋네. – sschaef

+0

@sschaef 동의하지 않습니다. 필자의 코드에서는 메소드 애플리케이션의 플랫 플로우 (flat flow) 일 뿐이며, 각각 하나의 원시 연산 만 수행한다. 또한 당신은'O (n^2)'를 가지고있는 동안 그것은'O (n)'복잡성을 가지고 있습니다. –

+0

가치가있는 부분에 대해 @sschaef는 그의 스 니펫 **이 멋지다고 생각합니다. 당신이 언급하는 "평탄함"은 일반적으로 흥미로운 속성이 될 수 있지만, 여기서는 매우 관련이 있는지 의심 스럽습니다 (정교하게 의견을 말하십시오). 반면에 런타임 복잡성은 매우 중요 할 수 있습니다. 그러나이 측면은 대개 코드가 보이는 방식과는 독립적입니다. –