Comment puis-je utiliser tryPick pour obtenir le premier élément d'une séquence?

StackOverflow https://stackoverflow.com/questions/1481957

  •  18-09-2019
  •  | 
  •  

Question

Je suis en train d'utiliser Seq.first aujourd'hui, et le compilateur dit qu'il a été dépréciée en faveur de Seq.tryPick. Il dit qu'il applique une fonction et renvoie le premier résultat qui renvoie certains. Je suppose que je peux juste dire fun x -> x = 0 car je sais que le premier sera de retour Certains dans mon cas, mais quelle est la contrainte propre à mettre ici! Quelle est la syntaxe correcte?

Pour clarifier, je veux l'utiliser dans le format suivant:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
Était-ce utile?

La solution

La clé est que « Seq.first » ne rapporte pas le premier élément, plutôt retourné le premier élément qui correspondait à un certain prédicat « choisir »:

let a = [1;2;3]
// two ways to select the first even number (old name, new name)
let r1 = a |> Seq.first (fun x -> if x%2=0 then Some(x) else None) 
let r2 = a |> Seq.tryPick (fun x -> if x%2=0 then Some(x) else None) 

Si vous voulez juste le premier élément, utilisez Seq.head

let r3 = a |> Seq.head 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top