首页 > 解决方案 > 在 seq 和向量之间转换的性能成本是多少?

问题描述

许多核心 Clojure 函数返回惰性序列,即使将向量传递给它们。例如,如果我有一个数字向量,并且想根据某个谓词过滤它们但又得到另一个向量 back,我必须做这样的事情:

(into [] (filter my-pred my-vec))

或者:

(vec (filter my-pred my-vec))

虽然我不确定两者之间是否有任何有意义的区别。

此操作是否昂贵,或者您是否像在转换到/从瞬态时那样免费有效地获得它?

我知道 seq 是惰性的,因此在将其放入输出向量之前实际上不会计算任何内容,但是从 seq 和具体集合转换是否有开销?它可以用大O来表征,还是大O在这里没有意义?从向量转换为序列时,另一种方式

标签: performanceclojure

解决方案


Clojure 站点中有一个常见问题解答,其中介绍了传感器的良好用例,这对于一些复杂的转换(不仅仅是过滤,或者当谓词相当复杂时)可能很方便。否则,您可以利用核心库上的filterv,您可以假设它为您做了任何合理的优化。


推荐阅读