У меня есть три массива, которые, когда первые два выровнены - [| ("C", "No"), ("C", "Yes"); ... |] - и отфильтрованы по третьему, должны генерировать "seq of seqs" - [...; seq [("C", ("Нет", 1), ("Да", 1)]; ...] ;:
module SOQN =
open System
let first = [| "C"; "D"; "C"; "E"; "B"; "A"; "A"; "E"; "A"; "B"; "A"; "D"; "B"; "E" |]
let second = [| "No"; "No"; "Yes"; "Yes"; "Yes"; "No"; "Yes"; "No"; "Yes"; "Yes"; "Yes"; "Yes"; "Yes"; "No" |]
let fltr = [| "No"; "Yes" |]
let filterProduct (first:string[]) (second:string[]) (fltr:string) =
Array.zip first second
|> Array.filter (fun (_, s) ->
Seq.forall (fun c -> s.Contains (string c)) fltr)
|> Array.map fst
|> Array.reduce (fun acc item -> acc + ", " + item)
let third =
[for i in [0..fltr.Length - 1] do
yield (filterProduct first second fltr.[i])]
|> List.toArray
printfn "third: %A" third
// Expected Result: third: [seq [("A", ("No", 1), ("Yes", 3)];
// seq [("B", ("No", 0), ("Yes", 3)];
// seq [("C", ("No", 1), ("Yes", 1)];
// seq [("C", ("No", 1), ("Yes", 1)];
// seq [("C", ("No", 2), ("Yes", 1)]]
// Actual Result: third: [|"C, D, A, E, E"; "C, E, B, A, A, B, A, D, B"|]
Как мне получить ожидаемый результат?