Есть пара подходов
Конвертировать в Set/NSSet
и затем отсортировать.
Swift
let vals = [0,0,0,2,0,1,2]
let uniqued = Set(vals).sorted()
Этот же метод будет также работать с NSSet
+ NSSortDescriptor
в Objective C, но, очевидно, более длинной строкой для записи.
или более классический c базовый подход
let nsvals: NSArray = [3,0,0,2,0,1,2]
let nsuniquedAndSorted = nsvals.value(forKeyPath: "@distinctUnionOfObjects.self")
Что круто, поскольку @distinctUnionOfObjects
также сортирует бесплатно. Есть много хитрых трюков с ключом-значением в том же духе здесь .
РЕДАКТИРОВАТЬ
Для сортировки по частоте можно использовать метод подсчета Затем юниксы прибегают к этому.
let sortedByIncidence = uniqued
.map { outer in return (outer, vals.filter({$0 == outer}).count) }
.sorted { $0.1 > $1.1 }
.map { $0.0 }