2009-09-26 44 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

相關問題