从Clojure的收藏中挑选一些物品,为什么subvec比Take&;慢;滴
是否有一种从收藏中提取某些物品的方法 我是这样做的:从Clojure的收藏中挑选一些物品,为什么subvec比Take&;慢;滴,clojure,Clojure,是否有一种从收藏中提取某些物品的方法 我是这样做的: (time (drop 30 (take 70 (range 10001)))) ;> "Elapsed time: 0.049797 msecs" ;> (30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69) (time (subvec (v
(time (drop 30 (take 70 (range 10001))))
;> "Elapsed time: 0.049797 msecs"
;> (30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69)
(time (subvec (vec (range 10001)) 30 70))
;> "Elapsed time: 2.072258 msecs"
;> [30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69]
问题:
你的比较没有以正确的方式进行 单个
时间
不足以比较两个代码块。您应该使用dotimes
重复多次,以便执行时间的差异更加可靠:
;; returns the time it took to repeat running the code 1000 times
(time (dotimes [i 1000] your-code-block))
在第二个代码块中,将range
返回的惰性序列转换为带有vec
的vector,这也需要一些额外的时间:
(vec (range 10001))
您可以使用time
+dotimes
技术将上述内容与(范围10001)
本身进行比较
我希望这将是你进一步探索的基础。 < P>你的比较没有按照正确的方式进行。 单个
时间
不足以比较两个代码块。您应该使用dotimes
重复多次,以便执行时间的差异更加可靠:
;; returns the time it took to repeat running the code 1000 times
(time (dotimes [i 1000] your-code-block))
在第二个代码块中,将range
返回的惰性序列转换为带有vec
的vector,这也需要一些额外的时间:
(vec (range 10001))
您可以使用time
+dotimes
技术将上述内容与(范围10001)
本身进行比较
希望这是你进一步探索的基础。非常感谢你!啊,懒惰很重要!非常感谢你!非常感谢您教我
(time(dotimes…)
方法。从现在起我会用它。这很有帮助。Clojure社区的人真的很棒。语言迫使他们这么做:)对于适当的微基准标记,你也可以使用非常感谢你教我(time(dotimes…)
方法。从现在起我会用它。这很有帮助。Clojure社区的人真的很棒。语言迫使他们这么做:)对于适当的微基准,你也可以使用