Основные операции с коллекциями в Swift
Коллекции — это фундаментальный элемент в программировании, позволяющий хранить и обрабатывать группы данных. В Swift коллекции включают массивы (Array), множества (Set) и словари (Dictionary), каждая из которых имеет свои особенности и сценарии использования. Более детально про коллекции описано тут.
Содержание:
Массивы (Array)
Создание и инициализация
Swift предлагает несколько способов создания и инициализации массивов (подробнее о массивах):
// Создание с указанием типа и начальных значений
let numbers: [Int] = [1, 2, 3, 4, 5]
// Создание с автоматическим выводом типа
let fruits = ["Яблоко", "Груша", "Банан"]
// Создание пустого массива
var emptyArray1: [String] = []
var emptyArray2 = [String]()
// Создание массива с повторяющимся значением
let repeatedValues = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]
Основные операции с массивами
var shoppingList = ["Молоко", "Хлеб"]
// Добавление элементов
shoppingList.append("Сыр") // ["Молоко", "Хлеб", "Сыр"]
shoppingList.insert("Яблоки", at: 0) // ["Яблоки", "Молоко", "Хлеб", "Сыр"]
// Удаление элементов
let bread = shoppingList.remove(at: 2) // ["Яблоки", "Молоко", "Сыр"]
let last = shoppingList.removeLast() // ["Яблоки", "Молоко"]
// Обновление элементов
shoppingList[0] = "Зеленые яблоки" // ["Зеленые яблоки", "Молоко"]
// Объединение массивов
let moreItems = ["Масло", "Мед"]
shoppingList += moreItems // ["Зеленые яблоки", "Молоко", "Масло", "Мед"]
// Получение подмассива
let firstTwo = shoppingList[0...1] // ["Зеленые яблоки", "Молоко"]
Итерация по массиву
let numbers = [1, 2, 3, 4, 5]
// Базовая итерация
for number in numbers {
print(number)
}
// Итерация с индексами
for (index, value) in numbers.enumerated() {
print("Элемент \(index + 1): \(value)")
}
Многомерные массивы
// Двумерный массив (матрица)
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
// Доступ к элементам
let centerElement = matrix[1][1] // 5
Множества (Set)
Создание и инициализация
// Создание с явным указанием типа
var colors: Set<String> = ["Красный", "Зеленый", "Синий"]
// Создание из массива
var numbers = Set([1, 2, 3, 4, 5, 1]) // Дубликаты автоматически удаляются
// Создание пустого множества
var emptySet = Set<Int>()
Основные операции с множествами
var fruits: Set = ["Яблоко", "Груша", "Апельсин"]
// Добавление элементов
let insertResult = fruits.insert("Банан") // (inserted: true, memberAfterInsert: "Банан")
let duplicateResult = fruits.insert("Яблоко") // (inserted: false, memberAfterInsert: "Яблоко")
// Удаление элементов
let removed = fruits.remove("Груша") // Optional("Груша")
fruits.removeAll() // Очистка множества
Операции теории множеств
let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]
// Объединение (union)
let union = setA.union(setB) // [1, 2, 3, 4, 5, 6, 7]
// Пересечение (intersection)
let intersection = setA.intersection(setB) // [3, 4, 5]
// Разность (subtracting)
let difference = setA.subtracting(setB) // [1, 2]
// Симметрическая разность (symmetricDifference)
let symmetricDifference = setA.symmetricDifference(setB) // [1, 2, 6, 7]
Проверка отношений между множествами
let setA: Set = [1, 2, 3]
let setB: Set = [1, 2, 3, 4, 5]
let setC: Set = [6, 7, 8]
// Проверка на подмножество
setA.isSubset(of: setB) // true
// Проверка на надмножество
setB.isSuperset(of: setA) // true
// Проверка на отсутствие общих элементов
setA.isDisjoint(with: setC) // true
Словари (Dictionary)
Создание и инициализация
// Создание с явным указанием типов
let scores: [String: Int] = ["Алиса": 95, "Боб": 80, "Чарли": 88]
// Создание с автоматическим выводом типов
let countries = ["FR": "Франция", "DE": "Германия", "IT": "Италия"]
// Создание пустого словаря
var emptyDict1: [String: Int] = [:]
var emptyDict2 = [String: Int]()
Основные операции со словарями
var airports = ["TYO": "Токио", "LAX": "Лос-Анджелес", "LHR": "Лондон"]
// Добавление или обновление элементов
airports["CDG"] = "Париж" // Добавление
airports["TYO"] = "Токио-Нарита" // Обновление
// Доступ к значениям
let tokyo = airports["TYO"] // Optional("Токио-Нарита")
// Безопасное получение значения с дефолтным значением
let unknown = airports["UNK", default: "Неизвестный аэропорт"]
// Удаление элементов
let removed = airports.removeValue(forKey: "LAX") // Optional("Лос-Анджелес")
airports["LHR"] = nil // Альтернативный способ удаления
Итерация по словарю
let capitals = ["Россия": "Москва", "Франция": "Париж", "Япония": "Токио"]
// Итерация по парам ключ-значение
for (country, capital) in capitals {
print("\(capital) - столица \(country)")
}
// Итерация по ключам
for country in capitals.keys {
print(country)
}
// Итерация по значениям
for capital in capitals.values {
print(capital)
}
// Получение массивов ключей и значений
let countriesArray = Array(capitals.keys)
let capitalsArray = Array(capitals.values)
Группировка и преобразование
// Пример использования Dictionary для группировки
let people = ["Анна", "Алексей", "Борис", "Андрей", "Вера"]
let groupedByFirstLetter = Dictionary(grouping: people) { $0.first! }
// Результат: ["А": ["Анна", "Алексей", "Андрей"], "Б": ["Борис"], "В": ["Вера"]]
// Создание словаря из последовательности пар
let pairs = [("a", 1), ("b", 2), ("c", 3)]
let dictionary = Dictionary(uniqueKeysWithValues: pairs)
// Результат: ["a": 1, "b": 2, "c": 3]