Removing duplicate elements from an array in Swift Removing duplicate elements from an array in Swift arrays arrays

Removing duplicate elements from an array in Swift


You can convert to a Set and back to an Array again quite easily:

let unique = Array(Set(originals))

This is not guaranteed to maintain the original order of the array.


You can roll your own, e.g. like this:

func unique<S : Sequence, T : Hashable>(source: S) -> [T] where S.Iterator.Element == T {    var buffer = [T]()    var added = Set<T>()    for elem in source {        if !added.contains(elem) {            buffer.append(elem)            added.insert(elem)        }    }    return buffer}let vals = [1, 4, 2, 2, 6, 24, 15, 2, 60, 15, 6]let uniqueVals = uniq(vals) // [1, 4, 2, 6, 24, 15, 60]

And as an extension for Array:

extension Array where Element: Hashable {    func uniqued() -> Array {        var buffer = Array()        var added = Set<Element>()        for elem in self {            if !added.contains(elem) {                buffer.append(elem)                added.insert(elem)            }        }        return buffer    }}

Or more elegantly (Swift 4/5):

extension Sequence where Element: Hashable {    func uniqued() -> [Element] {        var set = Set<Element>()        return filter { set.insert($0).inserted }    }}

Which would be used:

[1,2,4,2,1].uniqued()  // => [1,2,4]


Use a Set or NSOrderedSet to remove duplicates, then convert back to an Array:

let uniqueUnordered = Array(Set(array))let uniqueOrdered = Array(NSOrderedSet(array: array))