2009-09-26 46 views
9

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

为了澄清,我想在格式使用它:

令富(X:SEQ)= x.filter(有趣X - > x> 0) |> Seq.tryPick(?? )

回答

17

的关键是,“Seq.first”未返回的第一个元素,而它返回匹配一些“选择”谓词的第一个元素:如果你只是想第一个元素

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 
+0

谢谢,我刚刚尝试'seq.first'并得到了不推荐使用的消息,但之前从未使用过,因此我不知道确切的语法。 Seq.hd工作完美。 – esac 2009-09-27 01:14:40

+6

仅供参考,这似乎已在F#2.0中更改为'Seq.head'。 – elo80ka 2011-05-01 00:10:00

相关问题