Voglio estrarre un singolo elemento da una sequenza in F #, o dare un errore se non ce n'è uno o più di uno. Qual è il modo migliore per farlo?Estrai singolo elemento dalla lista in F #
Al momento ho
let element = data |> (Seq.filter (function | RawXml.Property (x) -> false | _ -> true))
|> List.of_seq
|> (function head :: [] -> head | head :: tail -> failwith("Too many elements.") | [] -> failwith("Empty sequence"))
|> (fun x -> match x with MyElement (data) -> x | _ -> failwith("Bad element."))
sembra funzionare, ma è davvero il modo migliore?
Edit: Come mi è stato fatto nella direzione giusta, mi si avvicinò con il seguente:
let element = data |> (Seq.filter (function | RawXml.Property (x) -> false | _ -> true))
|> (fun s -> if Seq.length s <> 1 then failwith("The sequence must have exactly one item") else s)
|> Seq.hd
|> (fun x -> match x with MyElement (_) -> x | _ -> failwith("Bad element."))
Credo che sia un po 'più bello.
Potete fornire una sequenza di campione e quello che stai cercando? –
Non lo trovo necessario. Voglio trovare il primo valore e dare un errore se ce n'è più di uno. Questo è il – erikkallen
+1 - vuoi un F # equivalente a un utile operatore LINQ (System.Linq.Enumerable.Single) - normalmente è il contrario! –