在 Clojure 中添加向量的惯用方法是什么? [英] What is the idiomatic way to prepend to a vector in Clojure?
本文介绍了在 Clojure 中添加向量的惯用方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
添加到列表很容易:
user=> (conj '(:bar :baz) :foo)
(:foo :bar :baz)
附加到向量很容易:
user=> (conj [:bar :baz] :foo)
[:bar :baz :foo]
我如何(惯用地)添加到向量,同时取回向量?这不起作用,因为它返回的是序列,而不是向量:
How do I (idiomatically) prepend to a vector, while getting back a vector? This does not work as it returns a seq, not a vector:
user=> (cons :foo [:bar :baz])
(:foo :bar :baz)
这很难看(IMVHO):
This is ugly (IMVHO):
user=> (apply vector (cons :foo [:bar :baz]))
[:foo :bar :baz]
注意:我基本上只想要一个可以附加和前置的数据结构.附加到大列表应该会有很大的性能损失,所以我想到了向量..
Note: I basically just want a datastructure that I can append and prepend to. Appending to large lists should have a large performance penalty, so I thought of vectors..
推荐答案
向量不是为前置而设计的.你只有 O(n) 前置:
Vectors are not designed for prepending. You have only O(n) prepend:
user=> (into [:foo] [:bar :baz])
[:foo :bar :baz]
您想要的很可能是 finger 树.
这篇关于在 Clojure 中添加向量的惯用方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文