为什么takeWhile不交付价值

时间:2015-03-16 08:15:13

标签: f#

我有以下代码段:

let t = seq { 1..10 } |> Seq.takeWhile (fun e -> e % 2 = 0)
t |> Seq.iter( fun e -> printf "%A " e)

并且t不包含任何值,但我期待2,4,6和8.我做错了什么?

1 个答案:

答案 0 :(得分:2)

您必须使用Seq.filter代替Seq.takeWhileSeq.takeWhile在谓词返回false后立即停止处理,并且因为1上返回false,所以没有进一步的元素。

来自MSDN:

  

返回一个序列,当迭代时,产生基础序列的元素,而给定的谓词返回 true ,然后不再返回其他元素

seq { 1..10 } 
|> Seq.filter (fun e -> e % 2 = 0)
|> Seq.iter( fun e -> printf "%A " e)

注意:无需将其绑定到t,因为Seq.iter不会产生任何元素,仅unit