Clojure列表与向量对集

时间:2013-02-02 00:13:11

标签: clojure

我是Clojure的新手。如果这是一个愚蠢的问题,请道歉!

每次我不关心项目的顺序时,我应该使用集合而不是向量或列表吗?在没有必要订购时,在这三者之间做出决定的共同标准是什么?

3 个答案:

答案 0 :(得分:20)

这实际上取决于您将如何使用这些物品。

  • 如果您要搜索项目,请使用一套。
  • 如果您要按顺序处理它,请使用列表。
  • 如果您要将其切成均匀大小的块(如排序时),请使用矢量。
  • 如果需要计算长度,请使用矢量。
  • 如果您要手动输入这些,请使用矢量(以节省一点引用)

在实践中,我看到的大部分处理都涉及将数据转换为seq并进行处理,因此列表和向量之间的区别通常是个人品味的问题。

答案 1 :(得分:9)

一般情况下,当你的主要关注点是“这个群体中的这个东西吗?”时,你想要一个集合。除了不保留顺序之外,集合也只保持给定值一次。因此,如果您关心值的精确放置,矢量就更符合您的要求。如果您主要关心会员资格的测试,那么更合适。

答案 2 :(得分:3)

是的,使用一套。除非你有非常好的理由选择其他东西(性能,内存使用......),否则这个套装是正确的选择。

请记住,编程主要是与代码的人类读者进行通信,而不是与计算机进行通信。通过使用集合,您可以完全清楚元素的顺序是无关紧要的(并且您不期望重复的值),帮助读者理解您的意图和您自己的心理思维。