19

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

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

4

3 回答 3

22

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

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

在实践中,我看到的大多数处理都涉及将数据转换为 aseq和处理 that,因此列表和向量之间的区别通常是个人喜好问题。

于 2013-02-02T00:31:16.723 回答
9

一般来说,当您的主要关注点是“这个东西在这个组中吗?”时,您需要一个集合。除了不保持顺序外,集合也只保存给定值一次。因此,如果您关心值的精确放置,则向量更适合您。如果您主要关心成员资格的测试,那么一组更合适。

于 2013-02-02T00:30:51.943 回答
3

是的,使用一套。除非您有非常非常好的理由来选择其他东西(性能、内存使用……),否则该集合是正确的选择。

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

于 2013-02-02T00:32:12.543 回答