Основные операции с коллекциями в 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]
Также читайте:  Как создать UIScrollView программно в UIKit?