Swift - Set vs Array

时间:2016-02-19 10:25:23

标签: swift

一方面我想要一个有序的集合,另一方面我希望集合中的每个项目只出现一次。

我可以使用数组并在每次插入项目时对其进行排序 - 只有在数组中不插入时才插入 或者使用Set数据结构并在每次查询数据时对其进行排序

有人有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

有几个第三方库在Swift中实现了一个有序集,所以你可以查看它们。

此外,如果对您的任务来说不是一种过度杀戮,您可以编写自己的有序集实现(您可以将其基于现有的实现)。您选择的方式取决于您的应用。

最后,您可以使用您提出的两种方法之一:使用内置数组或集合。要在它们之间进行选择,请查看您的应用:将更频繁地执行哪些操作?按顺序访问元素(然后使用数组)或添加/删除现有元素(可能是集合的方法)。

此部分是根据以下评论进行编辑的

如果你去寻找数组,请注意,数组的内置contains将不知道数组是否已排序,因此它可能是O(N),而不是O(log(N) )。因此,您应该为contains方法编写自定义替换,或者(这可能是更好的方法),编写一个以正确方式实现contains的自定义集合类(但是,自{ {1}}是contains的协议扩展方法,我对Swift的了解,我很害怕,还不足以告诉你如何正确地做到这一点,也许其他人会这样做。

更新(根据您对问题的评论)

我相信,在您的特定情况下(聊天应用)阵列是优越的。您只需要对旧邮件进行一次排序,并且您可能不会再尝试添加非常旧的邮件,您只需要确保不要再添加两次新邮件(但它依赖于实现,所以你知道更好,我只是假设)。因此,您只需检查旧数组中的最后一条消息是否与您添加的数组中的第一条消息重叠。排序:)