¿Cómo uso tryPick para obtener el primer elemento de una secuencia?
Pregunta
Yo estaba tratando de usar Seq.first hoy en día, y el compilador dice que ha sido desaprobado en favor de Seq.tryPick. Se dice que se aplica una función y devuelve el primer resultado que devuelve parte. Creo que sólo puedo decir divertido x -> x = 0 ya que sé el primero volverá Algunos en mi caso, pero lo que es la restricción apropiada para poner aquí!? ¿Cuál es la sintaxis correcta?
Para aclarar, yo quiero usarlo en el formato:
let foo(x:seq<int>) =
x.filter(fun x -> x>0)
|> Seq.tryPick (??)
Solución
La clave es que 'Seq.first' no volvió al primer elemento, sino que devuelve el primer elemento que coincidía con algún predicado 'elegir':
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 lo que desea es el primer elemento, utilice Seq.head
let r3 = a |> Seq.head
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow