如何在clojure中创建一个大向量

时间:2009-07-20 19:32:47

标签: clojure

如何分配带有1042个空索引的向量?
它的存储空间会被懒散分配吗? 像这样

(def a (array-creation-function 1042))
(def b (assoc a 1041 42))
(b 1041) 
--> 42

4 个答案:

答案 0 :(得分:14)

似乎向量不是稀疏的,因此在创建向量时必须为每个索引指定一个值。最简单的方法似乎是在序列上调用(vec)。

(vec (repeat 1042 nil))

似乎懒得创造这些值。

答案 1 :(得分:5)

如果你想要的东西不是懒惰但可以避免一些开销,你可以这样做:

(vec (make-array Object 1024))

注意,assoc不会改变向量,它会返回一个新的向量,其中一个值已更改。向量是不可变的。您的代码将永远无法发布。

答案 2 :(得分:5)

如果您的数据稀疏,那么请考虑使用空地图而不是矢量....然后您可以免费获得无限数量的懒惰分配的空索引!

(def a {})
(def b (assoc a 1041 42))
(b 1041) 
--> 42

答案 3 :(得分:4)

(apply vector (take 1024 (repeat nil)))

......很懒惰