> Как реализовать фильтрацию массива с сохранением уникальных элементов и порядка (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: 2GIS

Стек: iOS, Swift

> Пример ответа

Для фильтрации массива с сохранением уникальных элементов и их исходного порядка в Swift можно использовать NSOrderedSet или написать собственное расширение. Вот два подхода:

1. Использование NSOrderedSet (простой, но с приведением типов):

SWIFT
let array = [3, 1, 2, 3, 1, 4]
let uniqueArray = Array(NSOrderedSet(array: array)) as! [Int]
// [3, 1, 2, 4]

2. Кастомное расширение с сохранением порядка (более гибкое):

SWIFT
extension Array where Element: Hashable {
func unique() -> [Element] {
var seen = Set<Element>()
return filter { element in
if seen.contains(element) {
return false
} else {
seen.insert(element)
return true
}
}
}
}
// Использование:
let array = [3, 1, 2, 3, 1, 4]
let uniqueArray = array.unique() // [3, 1, 2, 4]

Второй подход предпочтительнее для iOS-разработки, так как он:

  • Работает с любыми Hashable типами (Int, String, пользовательские структуры)
  • Не требует приведения типов
  • Легко тестируется и переиспользуется
  • Эффективен по времени (O(n) за счёт Set)

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью