Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 功能型时的F#序列过滤器_Filter_F#_Functional Programming_Seq - Fatal编程技术网

Filter 功能型时的F#序列过滤器

Filter 功能型时的F#序列过滤器,filter,f#,functional-programming,seq,Filter,F#,Functional Programming,Seq,我有一系列需要过滤的数据。这很明显,因为我们有Seq.filter值。但是,我的问题是,我需要过滤,直到生成的集合达到一定数量的项。我不想对所有项目执行过滤,而只是进行截断,我想在我不再需要它的时候停止过滤 基本上,在命令式编程中,这是一项非常简单的任务——我可以用F轻松地完成它,就像用C语言完成一样,但我想用函数式的方式完成它 我已经查看了Collections.Seq模块,但没有找到任何对我有帮助的内容。事实上,我需要一些类似于过滤器的东西。有什么想法吗 谢谢您的帮助。您只需使用Seq.fi

我有一系列需要过滤的数据。这很明显,因为我们有
Seq.filter
值。但是,我的问题是,我需要过滤,直到生成的集合达到一定数量的项。我不想对所有项目执行过滤,而只是进行截断,我想在我不再需要它的时候停止过滤

基本上,在命令式编程中,这是一项非常简单的任务——我可以用F轻松地完成它,就像用C语言完成一样,但我想用函数式的方式完成它

我已经查看了
Collections.Seq
模块,但没有找到任何对我有帮助的内容。事实上,我需要一些类似于
过滤器的东西。有什么想法吗


谢谢您的帮助。

您只需使用
Seq.filter
,然后是
Seq.take
,其中包含您感兴趣的结果数:

Seq.filter
Seq.take
是惰性的,当Seq被强制时,一旦结果达到所需大小,它将停止过滤

下面是一个示例,使用无限序列测试它是否真的停止过滤:

Seq.initInfinite id  
    |> Seq.filter (fun x -> x % 2 = 0)
    |> Seq.take 10
    // then if you force the Seq
    |> Seq.toArray
这是一种函数式风格,这是使用惰性集合在FP语言中解决问题的方法,例如在Haskell中,这是一种纯FP语言,您可以用与列表相同的方法:
take 10(filter(\x->mod x2==0)[0..])