Swift有序集

时间:2017-10-02 21:53:39

标签: swift set

Swift是否有有序设置类型?如果没有,如果我想使用它,我有什么选择?

标准库的Set是无序的,正如文档中所明确的那样:

  

数组是有序的值集合。集是唯一值的无序集合。字典是键值关联的无序集合。

然而,许多适合实现有序集(和字典)的数据结构是已知的,特别是balanced binary trees,例如Red-Black trees

作为一个例子,c ++的stl有ordered sets和map,并允许使用下限和上限对它们进行范围查询。

我知道可以将一个集合的成员分类到一个数组中,但我正在使用O(log(n))插入,删除和查询的数据结构。

3 个答案:

答案 0 :(得分:10)

Swift没有本机有序集类型。如果您使用的是iOS,则可以在Swift中使用NSOrderedSet。如果没有,您就有机会编写自己的有序集数据结构。

更新Swift Package Manager includes an OrderedSet implementation可能有用。它包装数组和集合,并管理访问以获得有序集行为。

答案 1 :(得分:5)

2021 年 4 月 6 日,发布了一个新的 Swift 包:Swift-Collection,其中实现了另外三个数据结构。 (OrderedSet, OrderedDictionary, Deque)

但是,此软件包处于 1.0 之前的发布状态。因此,它可能不稳定。

Swift blog: Release of Swift Collections

答案 2 :(得分:3)

目前,Swift中没有任何顺序设置。尽管在所有Apple平台上都使用NSOrderedSet,但您可以简单地将SetArray结合使用,以基本获得相同的效果。 Set用于避免重复输入,Array用于存储订单。在将新元素添加到Array之前,请检查它是否已经在Set中。从Array删除元素时,也请从Set删除元素。要检查元素是否存在,请询问Set,它更快。要按索引检索元素,请使用Array。您可以更改Array中元素的顺序(例如重新排序),而完全不必触摸Set。要遍历所有元素,请使用Array,这样可以按顺序遍历元素。