如何使用tryPick获取序列的第一个元素?

问题描述 投票:11回答:1

我今天尝试使用Seq.first,并且编译器说它已经被弃用而不支持Seq.tryPick。它表示它应用了一个函数并返回返回Some的第一个结果。我想我可以说有趣的x - > x!= 0因为我知道第一个会在我的情况下返回一些,但是放在这里的适当约束是什么?什么是正确的语法?

为了澄清,我想以下列格式使用它:

let foo(x:seq<int>) =
   x.filter(fun x -> x>0)
   |> Seq.tryPick (??)
f# seq
1个回答
22
投票

关键是'Seq.first'没有返回第一个元素,而是返回匹配某些'choose'谓词的第一个元素:

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) 

如果您只想要第一个元素,请使用Seq.head

let r3 = a |> Seq.head 
© www.soinside.com 2019 - 2024. All rights reserved.