0Pricing
Swift Academy · Урок

Коллекции

Коллекции

«Коллекции» — бесплатный урок Swift Academy на CoddyKit. Это урок 1 из 1. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 1 уроков всего.

Введение

Здравствуйте,

В этом уроке мы изучим типы коллекций в Swift — одну из наиболее важных тем.

Итак, начнём.

В Swift есть 3 типа коллекций.

Массив → Последовательные коллекции.

Множество → Неупорядоченные коллекции с уникальными элементами.

Словарь → Неупорядоченные коллекции в формате пар ключ—значение.

Изменяемые — неизменяемые

Изменяемость или неизменяемость коллекции определяется способом её объявления.

Если объявить её с помощью оператора let, она будет неизменяемой, а при объявлении с помощью var — изменяемой.

Если определённое значение впоследствии не изменяется, использование let позволит компилятору работать производительнее за счёт более эффективной оптимизации.

Массив

Массив

Массив — это тип коллекции, используемый для последовательного хранения данных. Начиная со Swift 3, все элементы массива не обязаны иметь один и тот же тип.

Синтаксис простого объявления массива показан в приведённом ниже примере.

// Let's create an empty array.
var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// Prints "someInts is of type [Int] with 0 items."

Создание массива со значением по умолчанию

Создание массива со значением по умолчанию

В некоторых случаях может потребоваться создать массив с заданным значением по умолчанию и определённым размером. Для этого нужно передать два аргумента конструктору массива.

Эти аргументы определяют значение по умолчанию и количество элементов в массиве.

var threeDoubles = Array(repeating: 0.0, count: 3)
print(threeDoubles)
// threeDoubles is of type [Double], and equals [0.0, 0.0, 0.0]

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles is of type [Double], and equals [2.5, 2.5, 2.5]
print(anotherThreeDoubles)

var sixDoubles = threeDoubles + anotherThreeDoubles
print(sixDoubles)
// sixDoubles is inferred as [Double], and equals [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

Создание массива с помощью литерала массива

Создание массива с помощью литерала массива

В предыдущем примере мы узнали, как создать пустой массив. Однако в некоторых случаях может потребоваться создать массив с помощью литерала массива.

Изучим его использование на примере.

/*
We have defined a variable named catList, 
and with the [String] statement we specified 
that its type is an Array containing String elements.
*/
var catList: [String] = ["Garfield", "Tom"]
print(catList)
/*
It will understand that the array is an Array containing
String statements, since we assign a value that 
defines the variable. (Swift type inference)
*/
var shoppingList = ["Eggs", "Milk"]
print(shoppingList)

Доступ к значению массива

Доступ к значению массива

Чтобы получить элемент последовательности с определённым индексом, достаточно вызвать его с помощью следующего синтаксиса.

myArray [index]

Рассмотрим пример.

// We have defined an array with 3 elements of type Int.
var numbers:[Int] = [1, 5, 21]

// Arrays start from Index 0. For example, in order to reach the value 5, which is the 2nd element, we need to access the 1st index.
var a = numbers[1]
print( "Value of numbers at index 1 is \(a)" )

Добавление новых элементов в массив

Добавление новых элементов в массив

В массив можно добавить новый элемент. 

В приведённом ниже примере определяется массив с именем catList. Затем в этот массив добавляется новый элемент с помощью метода append. 

// The Array named catList was defined with 1 initial element.
var catList = ["Tom"]


/*
We are adding a new item with a Garfield 
value using the append method.
*/
catList.append("Garfield")
// Our array will now have 2 elements.


/*
With the + = operator, we can do the 
work that the append method does.
*/
catList += ["Sylvester"]

Добавление данных по определённому индексу в массив

Добавление данных по определённому индексу в массив

В предыдущем примере значение, добавленное с помощью метода append, помещается в конец массива. Однако иногда требуется добавить его по определённому индексу. Для этого используется метод insert.

Синтаксис будет выглядеть следующим образом.

myArr.insert ("The data to add", at: index);

Разберёмся на примере.

var catList = ["Tom"]

catList.insert("Garfield", at: 1)

print(catList)

Удаление определённого элемента из массива

Удаление определённого элемента из массива

Метод remove используется для удаления элемента массива с определённым индексом.

var shoppingList = ["Apple", "Cherry", "Cheese"]

let shoppingListOne = shoppingList.remove(at: 0)
// the item that was at index 0 has just been removed
// the mapleSyrup constant is now equal to the removed "Maple Syrup" string

let shoppingListTwo = shoppingList.removeLast()
// the last item in the array has just been removed

print(shoppingListTwo)

Итерация массива

Мы можем перебрать имеющийся массив с помощью цикла.

Рассмотрим пример.

var shoppingList = ["Banana", "Orange", "Milk"]

for item in shoppingList {
    print(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1): \(value)")
}
// Item 1: Six eggs
// Item 2: Milk
// Item 3: Flour
// Item 4: Baking Powder
// Item 5: Bananas

Множества

Множества

Используются для объединения коллекций одного типа без определённого порядка.

Как подсказывает название, это множества. В множестве не может быть двух элементов с одинаковым значением.

Создание пустого множества

Для создания пустого множества используется следующий пример.

var catSet = Set<Character>()

Создание множеств с помощью литерала массива

Создание множеств с помощью литерала массива

Литерал массива можно использовать для создания множества. Обратите внимание: хотя присвоенное здесь значение выглядит как массив, тип переменной — множество строк.

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

Предупреждение

При использовании литерала массива создать множество без указания типа невозможно. Иначе оно может быть воспринято как массив. Поэтому необходимо указать тип. 

По крайней мере, использовать его следует так, как показано ниже.

var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

Методы множества

Методы множества

Рассмотрим пример.

var favoriteGenres = ["Funk"]

print("I have \(favoriteGenres.count) favorite music genres.")

if favoriteGenres.isEmpty {
    print("favoriteGenres is empty")
} else {
    print("I have particular music preferences.")
}

if favoriteGenres.contains("Funk") {
    print("Funk")
} 

Перебор множества

Перебор множества

Тип множества в Swift не поддерживает порядок. Однако при переборе значения множества можно использовать метод sorted. Этот метод преобразует элементы множества в массив.

let favoriteGenres = ["Classical","Jazz", "Hip hop"]

for genre in favoriteGenres {
    print("\(genre)")
}
// Classical
// Jazz
// Hip hop

Словарь

Словарь

Это тип коллекции, который хранит значения в виде пар «ключ—значение» и не имеет определённого порядка.

Каждое значение хранится с уникальным ключом. Это представляет собой ID этого значения в словаре. В нём нет последовательности, как в массивах. Можно представить себе словарь из реального мира.

Таким образом, идентичность каждого значения важнее его позиции.

Тип словаря можно определить с помощью сокращённой записи [ключ: значение]. Сокращённая запись используется чаще.

var namesOfIntegers = [Int: String]()
// namesOfIntegers is an empty [Int: String] dictionary

namesOfIntegers[16] = "sixteen"
// namesOfIntegers now contains 1 key-value pair
namesOfIntegers = [:]
// namesOfIntegers is once again an empty dictionary of type [Int: String]

Методы доступа к словарю

С помощью метода подсчёта можно узнать, сколько элементов содержит словарь.

Кроме того, с помощью метода isEmpty можно проверить, пуст ли словарь.

Рассмотрим примеры использования этих методов.

var airports = ["LHR": "London", "IST": "Istanbul"]

print("The airports dictionary contains \(airports.count) items.")
// Prints "The airports dictionary contains 2 items."

if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}
// Prints "The airports dictionary is not empty."

airports["LHR"] = "London"
// the airports dictionary now contains 3 items

Обращение по индексу

Процесс получения значения по индексу выглядит так. Результат может отсутствовать.

var airports = ["DUB":"Dublin"]

if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}
// Prints "The name of the airport is Dublin Airport."



//Deletion
airports["APL"] = nil

if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue).")
} else {
    print("The airports dictionary does not contain a value for DUB.")
}
// Prints "The removed airport's name is Dublin Airport."

Обновление словаря

Помимо использования приведённого выше обращения по индексу, словарь можно обновлять с помощью специального метода.

Особенность этого метода в том, что после обновления он возвращает прежнее значение — то, которое было до обновления.

var airports = ["DUB": "Dublin"]

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value for DUB was \(oldValue).")
}
// Prints "The old value for DUB was Dublin."

Пример преобразования словаря в массив

Ниже приведён пример преобразования словаря в массив.


let airports = ["IST":"Istanbul Airport", "DUB":"Dublin Airport"]

let airportCodes = [String](airports.keys)
print(airportCodes)

let airportNames = [String](airports.values)
print(airportNames)

Поздравляем

Поздравляем 🎉

В этом уроке мы узнали как использовать коллекции в Swift.

До встречи на следующем уроке.

Коллекции — иллюстрация 22

Часто задаваемые вопросы

Урок «Коллекции» бесплатный?

Да — полный текст урока «Коллекции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 1 уроков всего.

Чему я научусь в уроке «Коллекции»?

Коллекции Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 1.

Сколько времени занимает урок «Коллекции»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

← Назад к Swift Academy