Swift Ordered Set
Swift does not have a native ordered set type. If you use Foundation
, you can use NSOrderedSet
in Swift. If not, you have the opportunity to write your own ordered set data structure.
Update: Swift Package Manager includes an OrderedSet
implementation that may be useful. It wraps both an array and a set and manages access to get ordered set behavior.
Update #2: Apple's Swift Collections repository contains an ordered set implementation.
At the time being there is no ordered set in Swift. Despite using NSOrderedSet
on all Apple platforms, you can simply combine a Set
with an Array
to basically get the same effect. The Set
is used to avoid duplicate entries, the Array
is used to store the order. Before adding a new element to the Array
, check if it is in the Set
already. When removing an element from the Array
, also remove it from the Set
. To check if an element exists, ask the Set
, it's faster. To retrieve an element by index, use the Array
. You can change the order of elements in the Array
(e.g. resort it) without having to touch the Set
at all. To iterate over all elements, use the Array
as that way the elements are iterated in order.
On April 6th, 2021, a new package of Swift was released: Swift-Collection where three more data structures have been implemented. (OrderedSet
, OrderedDictionary
, Deque
)
However, this package is in its pre-1.0 release state. As a result, it might not be stable.
Swift blog: Release of Swift Collections