Come si usa tryPick per ottenere il primo elemento di una sequenza?
Domanda
Stavo cercando di utilizzare Seq.first oggi, e il compilatore dice che è stato deprecato in favore di Seq.tryPick. Si dice che essa si applica una funzione e restituisce il primo risultato che restituisce alcuni. Credo che posso solo dire divertimento x -> x = 0 perché so il primo tornerà Alcuni nel mio caso, ma qual è il vincolo corretto di mettere qui!? Qual è la sintassi corretta?
Per chiarire, io voglio usare nel formato:
let foo(x:seq<int>) =
x.filter(fun x -> x>0)
|> Seq.tryPick (??)
Soluzione
La chiave è che 'Seq.first' non ha restituito il primo elemento, piuttosto restituito il primo elemento che ha trovato un certo predicato 'scegliere':
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)
Se si desidera solo il primo elemento, utilizzare Seq.head
let r3 = a |> Seq.head
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow