如何分配带有1042个空索引的向量?
它的存储空间会被懒散分配吗?
像这样
(def a (array-creation-function 1042))
(def b (assoc a 1041 42))
(b 1041)
--> 42
Run Code Online (Sandbox Code Playgroud)
Art*_*ldt 14
似乎向量不是稀疏的,因此在创建向量时必须为每个索引指定一个值.最简单的方法似乎是在序列上调用(vec).
(vec (repeat 1042 nil))
Run Code Online (Sandbox Code Playgroud)
似乎懒得创造这些价值观.
如果你想要的东西不是懒惰但可以避免一些开销,你可以这样做:
(vec (make-array Object 1024))
Run Code Online (Sandbox Code Playgroud)
注意,assoc不改变向量,它返回一个新的向量,其中一个值已更改.向量是不可变的.您的代码将永远无法发布.
如果您的数据是稀疏的,那么考虑使用空地图而不是矢量....然后您可以免费获得无限数量的懒惰分配的空索引!
(def a {})
(def b (assoc a 1041 42))
(b 1041)
--> 42
Run Code Online (Sandbox Code Playgroud)