Swift是否有有序设置类型?如果没有,如果我想使用它,我有什么选择?
标准库的Set
是无序的,正如文档中所明确的那样:
数组是有序的值集合。集是唯一值的无序集合。字典是键值关联的无序集合。
然而,许多适合实现有序集(和字典)的数据结构是已知的,特别是balanced binary trees,例如Red-Black trees。
作为一个例子,c ++的stl有ordered sets和map,并允许使用下限和上限对它们进行范围查询。
我知道可以将一个集合的成员分类到一个数组中,但我正在使用O(log(n))
插入,删除和查询的数据结构。
答案 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 之前的发布状态。因此,它可能不稳定。
答案 2 :(得分:3)
目前,Swift中没有任何顺序设置。尽管在所有Apple平台上都使用NSOrderedSet
,但您可以简单地将Set
与Array
结合使用,以基本获得相同的效果。 Set
用于避免重复输入,Array
用于存储订单。在将新元素添加到Array
之前,请检查它是否已经在Set
中。从Array
删除元素时,也请从Set
删除元素。要检查元素是否存在,请询问Set
,它更快。要按索引检索元素,请使用Array
。您可以更改Array
中元素的顺序(例如重新排序),而完全不必触摸Set
。要遍历所有元素,请使用Array
,这样可以按顺序遍历元素。