2009-09-26 5 views
9

Intenté utilizar Seq.first hoy, y el compilador dice que ha quedado en desuso en favor de Seq.tryPick. Dice que aplica una función y devuelve el primer resultado que devuelve Some. Supongo que puedo decir diversión x -> x! = 0 ya que sé que el primero devolverá algo en mi caso, pero ¿cuál es la restricción adecuada para poner aquí? ¿Cual es la sintaxis correcta?¿Cómo uso tryPick para obtener el primer elemento de una secuencia?

Para aclarar, yo quiero usarlo en el formato:

Let foo (x: ss) = x.filter (divertido x -> x> 0) |> Seq.tryPick (??)

Respuesta

17

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, use Seq.head

let r3 = a |> Seq.head 
+0

Gracias, acabo de probar 'seq.first' y recibí el mensaje en desuso, pero nunca lo he usado antes, así que no sabía la sintaxis exacta. Seq.hd funciona perfecto. – esac

+6

FYI, esto parece haber sido cambiado a 'Seq.head' en F # 2.0. – elo80ka

Cuestiones relacionadas