Clojure列表 vs.向量vs.集合

19

我刚接触Clojure,如果问题比较愚蠢,请见谅!

在不关心项目顺序时,是否每次都应该使用 set 而不是 vector 或 list?当不需要考虑顺序时,如何选择这三者之一是一个普遍的标准?

3个回答

22

这取决于您将如何使用这些项目。

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

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


9

通常情况下,当您的主要关注点是“这个东西在这个组中吗?”时,您需要使用set。除了不保留顺序之外,set还只能保存一个特定的值。因此,如果您关心值的精确位置,则更适合使用vector。如果您主要关心成员资格测试,则应使用set。


3

是的,使用set。除非你有非常好的理由选择其他东西(例如性能、内存使用等),否则set是正确的选择。

记住,编程主要是与代码的人类读者进行沟通,而不是与计算机进行沟通。通过使用set,您使元素的顺序无关紧要(并且您不希望出现重复值),帮助读者理解您的意图和自己的思维方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接