Je veux extraire un seul élément d'une séquence en F #, ou donner une erreur s'il n'y en a pas ou plus d'une. Quelle est la meilleure façon de procéder?Extrait un seul élément de la liste dans F #
J'ai actuellement
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."))
Il semble fonctionner, mais est-ce vraiment la meilleure façon?
Edit: Comme je l'ai été souligné dans la bonne direction, je suis venu avec ce qui suit:
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."))
Je pense qu'il est un peu plus agréable.
Pouvez-vous fournir une séquence d'échantillons et ce que vous cherchez? –
Je ne trouve pas cela nécessaire. Je veux trouver la première valeur et donner une erreur s'il y en a plus d'une. C'est – erikkallen
+1 - vous voulez un F # équivalent à un opérateur LINQ utile (System.Linq.Enumerable.Single) - normalement c'est l'inverse! –