Удалить одинаковые элементы из массива iOS на Swift 3

Задача

Нужно из массива удалить повторяющиеся элементы. При этом массив может содержать элементы любого типа.

Решение

Для удаления одинаковых элементов из массива следует написать универсальную функцию, которая принимает в качестве параметра аргумент типа «коллекция» и возвращает другой массив.

//
// proSwift.ru
//
// Swift 3

private func uniq<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
}

Внутри функции мы перебираем элементы исходного массива, и по одному проверяем содержание элемента в наборе added и если его там нет, до добавляем элемент в возвращаемый массив и в набор added. Как вы помните, в наборе не может быть двух одинаковых элементов, поэтому проверка на содержание в этом наборе является флагом добавления в возвращаемый массив.




Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.