在Clojure中,什么时候应该在列表上使用向量,而反过来呢?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我读了矢量不是序列,但列表是。我不确定使用其中一个的理由是什么。看起来矢量使用得最多,但是有什么原因吗?

提问于
用户回答回答于

[12:21] <Raynes>    Vectors aren't seqs, right?
[12:21] <rhickey>   Raynes: no, but they are sequential
[12:21] <rhickey>   ,(sequential? [1 2 3])
[12:21] <clojurebot>    true
[12:22] <Raynes>    When would you want to use a list over a vector?
[12:22] <rhickey>   when generating code, when generating back-to-front
[12:23] <rhickey>   not too often in Clojure
用户回答回答于

如果你已经完成了很多Java编程,并且熟悉Java收集框架,可以考虑类似的列表LinkedList和类似的矢量ArrayList。所以你几乎可以用同样的方式选择容器。

为了进一步说明:如果你打算将项目单独添加到序列的前面或后面,链接列表要比向量好很多,因为这些项目不需要每次都洗牌。但是,如果想要频繁地访问特定元素(不在列表的前面或后面)(即随机访问),则需要使用向量。

顺便说一句,向量可以很容易地变成seqs。

user=> (def v (vector 1 2 3))
#'user/v
user=> v
[1 2 3]
user=> (seq v)
(1 2 3)
user=> (rseq v)
(3 2 1)

扫码关注云+社区