Ich habe das folgende Problem in scala. Ich muss das erste Element in einer Liste finden, das eine Prädikatfunktion mit zwei Bedingungen in OR erfüllt. Das Problem ist, dass ich das Element erhalten möchte, aber auch wissen möchte, welche der beiden Bedingungen erfüllt ist. Hier ist ein einfaches Beispiel:Suchen von Elementen in einer Skala-Liste und auch wissen, welches Prädikat erfüllt wurde
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)))
Ergebnis ist:
Some(B)
Some(AA)
Für den l1 Fall Ich mag würde einigen Rückgabewert habe (ein String zum Beispiel), die anzeigt, dass c1 erfüllt wurde (c2 für die l2 Fall). Eine mögliche Lösung könnte sein, eine Var vor dem Test zu definieren und sie innerhalb der c1 und c2 Funktionen zu setzen, aber ich würde gerne eine "funktionalere" Lösung finden, vielleicht etwas, das ein Tupel zurückgibt: (Element gefunden, Bedingung zufrieden).
Vielen Dank im Voraus für die Hilfe
Verallgemeinert zu einer Liste von Prädikaten 'def findPredsOr [T] (l: Liste [T], ps: Liste [T => Boolesch]): Option [(T , List [Boolean])] = l.view.map (el => (el, ps.map (_. Apply (el)))) .find (t => t._2.contains (true)) ' – retronym
Große Lösung. Danke für die Entdeckung/Ansicht, es scheint sehr nützlich zu sein! –