为什么 takeWhile 不传递值
Why takeWhile does not delivery values
我有以下代码片段:
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。我做错了什么?
您必须使用 Seq.filter
而不是 Seq.takeWhile
。 Seq.takeWhile
一旦谓词 returns false
就停止处理,因为 false
在 1 上返回,所以没有进一步的元素。
来自 MSDN:
Returns a sequence that, when iterated, yields elements of the underlying sequence while the given predicate returns true, and then returns no further elements.
seq { 1..10 }
|> Seq.filter (fun e -> e % 2 = 0)
|> Seq.iter( fun e -> printf "%A " e)
注意:不需要将它绑定到 t
,因为 Seq.iter
不产生任何元素,只是 unit
我有以下代码片段:
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。我做错了什么?
您必须使用 Seq.filter
而不是 Seq.takeWhile
。 Seq.takeWhile
一旦谓词 returns false
就停止处理,因为 false
在 1 上返回,所以没有进一步的元素。
来自 MSDN:
Returns a sequence that, when iterated, yields elements of the underlying sequence while the given predicate returns true, and then returns no further elements.
seq { 1..10 }
|> Seq.filter (fun e -> e % 2 = 0)
|> Seq.iter( fun e -> printf "%A " e)
注意:不需要将它绑定到 t
,因为 Seq.iter
不产生任何元素,只是 unit