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..])