🍎 Swift

Массивы (списки) в Swift 5.9: подробное руководство

Массивы (списки) в Swift

Представь, что у тебя есть рюкзак, в который можно положить много разных вещей: яблоки, книги, игрушки. Только в программировании мы кладем в такой «рюкзак» числа, слова или другие данные. Этот «рюкзак» называется массивом (или списком).

Массив помогает хранить много значений в одной переменной. Например, список всех фруктов, которые привезли в магазин, или высоты, на которые поднялся альпинист.

Как создать массив

В Swift массив создается с помощью квадратных скобок [ ]. Все элементы внутри массива должны быть одного типа (например, только числа или только строки).

// Массив строк (слова)
let фрукты: [String] = ["Яблоко", "Банан", "Апельсин"]

// Массив целых чисел
let числа: [Int] = [10, 20, 30, 40]

// Массив с дробными числами
let высоты: [Double] = [100.5, 200.0, 150.3]

Если не указывать тип, Swift сам догадается:

var цвета = ["Красный", "Синий", "Зеленый"] // Swift поймет, что это [String]

Доступ к элементам массива

У каждого элемента в массиве есть свой номер — индекс. Индексы начинаются с 0!

var фрукты = ["Яблоко", "Банан", "Апельсин"]
print(фрукты[0]) // Выведет: Яблоко
print(фрукты[1]) // Выведет: Банан
print(фрукты[2]) // Выведет: Апельсин

Изменение массива

Если массив создан с помощью var (изменяемый), можно менять, добавлять или удалять элементы.

var корзина = ["Груша", "Лимон"]
корзина[0] = "Киви" // Заменили "Грушу" на "Киви"
print(корзина) // ["Киви", "Лимон"]

корзина.append("Виноград") // Добавили в конец
print(корзина) // ["Киви", "Лимон", "Виноград"]

корзина.remove(at: 1) // Удалили элемент с индексом 1 ("Лимон")
print(корзина) // ["Киви", "Виноград"]

Количество элементов и проверка

let числа = [5, 10, 15]
print(числа.count) // Выведет: 3 (количество элементов)

if числа.isEmpty {
    print("Массив пуст")
} else {
    print("В массиве \(числа.count) элемента")
}

Перебор массива (цикл for)

Чтобы пройтись по всем элементам, используй цикл for:

let фрукты = ["Яблоко", "Банан", "Апельсин"]
for фрукт in фрукты {
    print("Сегодня у нас есть: \(фрукт)")
}
// Выведет:
// Сегодня у нас есть: Яблоко
// Сегодня у нас есть: Банан
// Сегодня у нас есть: Апельсин

Разбор типичных задач

Задача 1: Фрукты в магазине

Владелец магазина записывает фрукты в массив. Нужно вывести их все.

var поставка = ["Яблоко", "Груша", "Банан", "Киви"]
print("Фрукты, полученные за неделю:")
for фрукт in поставка {
    print("- \(фрукт)")
}
// Выведет:
// - Яблоко
// - Груша
// - Банан
// - Киви

Задача 2: Робот-сортировщик

Робот отбирает детали с номерами больше 100.

let детали = [45, 120, 78, 200, 33, 150]
print("Детали для следующего этапа:")
for номер in детали {
    if номер > 100 {
        print("Деталь №\(номер) подходит")
    }
}
// Выведет:
// Деталь №120 подходит
// Деталь №200 подходит
// Деталь №150 подходит

Задача 3: Запас материалов

Повар заметил ошибку: во втором пункте списка (индекс 1) нужно удвоить количество хлеба.

var запасы = [10, 5, 8] // Яйца, Хлеб, Молоко
запасы[1] = запасы[1] * 2 // Удвоили хлеб
print("Новый запас: \(запасы)") // [10, 10, 8]

Задача 4: Суп в школе

Помоги повару посчитать общее количество порций супа за неделю.

let порции = [30, 25, 40, 35, 20] // Пн, Вт, Ср, Чт, Пт
var всего = 0
for порция in порции {
    всего += порция
}
print("Всего порций супа за неделю: \(всего)") // 150

Задача 5: Юный альпинист

Вася записывал высоту каждый день. Найди моменты, когда высота была больше 2000 метров.

let высоты = [1500, 2100, 1800, 2500, 1900]
print("Дни, когда высота больше 2000 м:")
for (индекс, высота) in высоты.enumerated() {
    if высота > 2000 {
        print("День \(индекс + 1): \(высота) м")
    }
}
// Выведет:
// День 2: 2100 м
// День 4: 2500 м

Частые ошибки новичков

  • Выход за границы массива: Попытка обратиться к индексу, которого нет. Например, если в массиве 3 элемента (индексы 0, 1, 2), то массив[3] вызовет ошибку. Всегда проверяй count.
  • Путаница с индексами: Помни, что первый элемент — это индекс 0, второй — 1 и т.д.
  • Изменение константного массива (let): Если массив объявлен через let, его нельзя изменить. Используй var.
  • Разные типы данных: Нельзя смешивать строки и числа в одном массиве без специального объявления.

Итоговый пример: Сбор урожая

Фермер собрал урожай яблок. Каждый день он записывал количество собранных килограммов. Помоги фермеру:

  • Найти общий вес урожая
  • Найти день с максимальным сбором
var урожай = [120, 95, 150, 80, 200] // кг за 5 дней
var общийВес = 0
var максимальныйСбор = урожай[0]
var деньМаксимума = 1

for (индекс, вес) in урожай.enumerated() {
    общийВес += вес
    if вес > максимальныйСбор {
        максимальныйСбор = вес
        деньМаксимума = индекс + 1
    }
}

print("Общий вес урожая: \(общийВес) кг")
print("Максимальный сбор был в день \(деньМаксимума): \(максимальныйСбор) кг")
// Выведет:
// Общий вес урожая: 645 кг
// Максимальный сбор был в день 5: 200 кг

Массивы — это основа для хранения списков данных. Тренируйся создавать, изменять и перебирать массивы, и ты быстро освоишь эту тему!