Ich mag würde so etwas wie imaginäre Array.multipick
implementieren (?):Elegante Array.multipick Implementierung
Array.multipick : choosers:('a -> bool) [] -> array:'a [] -> 'a []
Intern Wir prüfen jedes Element des Arrays mit allen choosers
, die ersten chooser
true
zurückzukehren entfernt von choosers
Array, und wir fügen das Argument chooser
zu dem Ergebnis hinzu. Danach setzen wir die Integration fort, während choosers
Array Elemente übrig hat.
Der letzte Teil ist wichtig, denn ohne frühe Ausstiegsanforderung könnte dies nur mit Array.fold
gelöst werden.
let rec impl currentIndex currentChoosers results
Aber es ist zu prozeduralen für meinen Geschmack:
Dieses leicht mit so etwas wie umgesetzt werden könnten. Vielleicht gibt es eine elegantere Lösung?
yeah, ich hatte ähnliche Gedanken im Sinn! auch faul Seq.scan + Seq.takeWhile Kombination ist ziemlich ordentlich. – yuyoyuppe