2016-11-13 3 views
5

У меня есть формула, перенастраивающая массив в качестве примера var Array = [a,s,d,s,f,g,g,h,e]. Я хочу запустить цикл for или какой-либо другой вариант, который возвращает мне a,s,d,f,g,h,e - только уникальные значения. Как я могу сделать это с помощью ios Swift?Как отображать уникальные элементы массива с помощью Swift?

+0

Вы заботитесь о порядке элементов? – Alexander

ответ

10

Если вы не заботитесь о заказе:

Просто используйте набор:

let set: Set = ["a", "s", "d", "s", "f", "g" , "g", "h", "e"] 
print(set) // ["a", "s", "f", "g", "e", "d", "h"] 

Если вы заботитесь о порядке:

использовать это расширение, которое позволяет удалить дубликаты элементов AnySequence, сохраняя при этом порядок:

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

let array = ["a", "s", "d", "s", "f", "g" , "g", "h", "e"] 
let result = array.unique() 
print(result) // ["a", "s", "d", "f", "g", "h", "e"] 
+0

Я думаю, если изменить ужеAdded type на Array, это будет быстрее. – masakih

+0

@masakih Что заставляет вас подозревать? Наборы имеют 'O (1)' look ups (необходимо для быстрого 'содержит (_ :)' вызовы), тогда как массив имеет O (n) петли вверх в общем случае – Alexander

+0

извините! Я фокусировался только на 'insert (_ :)'. но я упустил 'contains (_ :)'. – masakih

Смежные вопросы