다음과 같은 문제가 있습니다. 나는 OR리스트에서 두 개의 조건을 가진 술어 함수를 만족시키는 첫 번째 요소를 찾아야 만한다. 문제는 요소를 얻고 싶지만 두 조건 중 어느 것이 만족 했는지도 알고 싶습니다.스칼라 목록에서 요소를 찾고 어떤 술어가 만족되었는지도 알 수 있습니다.
val l1 = List("A", "B", "AA", "BB")
val l2 = List("AA", "BB", "A", "B")
def c1(s: String) = s.startsWith("B")
def c2(s: String) = s.length == 2
println(l1.find(s => c1(s) || c2(s)))
println(l2.find(s => c1(s) || c2(s)))
결과이다 : 일부 리턴 값 (예를 들어, 문자열) 싶은 L1 케이스
Some(B)
Some(AA)
C1을 위해 (C2 만족되었음을 나타내는 여기서 간단한 예이고 12 사례). 가능한 해결책은 테스트 전에 var를 정의하고 c1 및 c2 함수 내에서 설정할 수 있지만 좀 더 "기능 스타일"솔루션을 찾고 싶습니다. 다음과 같이 터플을 반환하는 뭔가가있을 수 있습니다. (요소를 발견했습니다., 조건 만족). def find[T](l1 : List[T], fs : Map[T => Boolean, String])
를하거나 자신의 연산자를 정의 : 요구 사항에 따라 도움
술어의 목록에 일반화'def findPredsOr [T] (l :리스트 [T], ps :리스트 [T => 부울]) : 옵션 [(T , list [Boolean])] = l.view.map (엘, ps.map (_. apply (el)))) find (t => t._2.contains (true))' – retronym
그레이트 솔루션. 보기/투영을 발견해 주셔서 감사합니다. 매우 유용합니다! –