看完这两个线程:F#有没有类似于Haskell中的take函数的等价物?,从F#序列中取N个具有N个不同索引的元素,我一直在思考在列表上使用序列运算符的最佳方法,或者是否使用它们。
目前,我是F#的新手,并正在编写一个程序,需要处理从HtmlAgilityPack获得的大量序列。Seq模块中有一些有趣的运算符,但正如那些线程中所述,可能与性能相关性差,如果我们被迫不断在seq和list之间进行转换,还会使代码混杂着一些非问题解决的内容......这也是我学习F#的原因。
举个简单的例子,当我需要从列表中取出'N'个元素时:
listOfRows
|> Seq.take 2
// Now I don't have a list anymore, it returns a sequence
|> List.ofSeq
那么,有人能够解释一下处理这些情况的最佳方法吗?我可以使用Seq.take和Seq.skip来解决问题,但这被认为是非常低效的。另一方面,很遗憾将功能内置于标准库中,并且不得不重新实现它以在不同的集合上使用相同的概念,或者通过显式转换使代码变得更加混乱。
我如何看待'list -> seq'和'seq -> list'之间每次转换的性能影响?
非常感谢。
list
是seq
,需要基于游标访问集合的函数只需要针对最抽象的类型seq
实现。你自己去实现这些函数所得到的收益微乎其微,这也是我回答的部分意义所在。 - Daniel