如何分配带有1042个空索引的向量?
它的存储空间会被懒散分配吗?
像这样
(def a (array-creation-function 1042))
(def b (assoc a 1041 42))
(b 1041)
--> 42
答案 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)))
......很懒惰