Урок 9. Словари
Главная / Уроки / Страница блока Основы / Урок 9. Словари
1 Ноября 2022
Словарь – это тип коллекции, представляющий собой набор пар ключ и значение [kay: value].
Давайте создадим один словарь с одной парой:
// Словарь с ключами целых чисел и строковыми значениями
kay value
let integers = [1: “one”]
Перед вами словарь, который содержит в себе одну пару ключ и значение, давайте добавим еще две пары:
// Словарь с ключами целых чисел и строковыми значениями
let integers = [1: "one", 2: "two", 3: "three"]
Таким образом через запятую вы можете добавлять любое количество пар.
Давайте посмотрим на тип данного словаря (зажимаем клавишу option и кликаем по свойству, если окно не появляется то следует запустить playground):
Вы можете видеть что все ключи имеют тип Int, а все значения тип String.
Все ключи должны быть одного типа данных, и все значения должны быть одного типа. Вы не сможете создать словарь следующим образом:
Первая пара будет иметь тип [String: String] тогда как вторая и третья тип [Int: String] это разные типы данных, поэтому компилятор нам выдает ошибку.
Обратите внимание, что ключи и значения могут быть любых типов.
Давайте создадим еще пару словарей:
// Словарь с ключами-строками и значениями-целыми числами
kay value
let people = [“Anna”: 32, “Bob”: 45, “Charlie”: 60]
// Словарь с числовыми ключами типа Double и значениями числовых массивов
kay value kay value kay value
let dictOfnumbers = [1.0: [1, 2, 3], 2.5: [4, 5, 6], 3.14: [7, 8, 9]]
Ну и давайте посмотрим на тип данных каждого свойства:
Как вы видите в качестве ключа и в качестве значения могут выступать любые типы данных даже ваши кастомные, но об этом вы узнаете чуть позже.
Ключи в словаре должны быть уникальными, то есть ты не сможешь создать словарь с одинаковыми ключами

Давайте создадим словарь с одинаковыми ключами и значениями:
Компилятор выдает нам ошибку, потому что ключи должны быть уникальными, давайте исправим один из ключей:
Ошибка пропадает. В отличие от ключей, значения могут повторятся.
Словарь это не упорядоченная коллекция, в отличие от массивов, там элементы располагаются в хаотичном порядке. Поэтому при каждом запуске компилятора, порядок будет изменяться.

Достать значение по ключу
let people = ["Anna": 32, "Bob": 45, "Charlie": 60]
people["Anna"]
если мы посмотрим с права, то увидим значение 32
А если мы видим это значение с права, то мы это значение можем использовать, например присвоить новому свойству:
let people = ["Anna": 32, "Bob": 45, "Charlie": 60]
let age = people["Anna"]
Свойство age будет иметь тип Int, потому что по факту мы взяли значение по ключу Anna и присвоили его новому свойству.
Мы можем присвоить новое значение по выбранному ключу, только словарь нужно сделать изменяемым, то есть переменной:
Мы присвоили новое значение по ключу Anna и оно равно теперь 44, хотя изначально было 32.
Если мы обратимся к несуществующему ключу и присвоим новое значение, то мы создадим новую пару:
Иногда в разработке необходимо создать пустой словарь, что бы в дальнейшем его наполнить данными:
let dictionaryOne: [Int: String] = [:]
let dictionaryTwo = [Int: String]()
Это два способа создать пустой словарь, можно использовать любой, какой ближе к сердцу.
Методы Словаря
Так как словарь является коллекцией, то у него почти те же методы что и у массивов.
count – как вы помните это свойство возвращает количество пар ключ-значение в словаре
В словаре people находится три пары ключа и значения.
isEmpty – возвращает true если в словаре нет ни одного элемента, то есть если он пустой. И false если элементы все таки есть.
так как в словаре есть элементы, то нам вернулось false.
updateValue(_: forKey: ) – этот метод обновляет значение для указанного ключа, и возвращает старое значение.
Обратите внимание какие типы данных нам предлагает компилятор вставить в параметры. В первый параметр мы должны передать новое значение с типом Int. Откуда компилятору известно какого типа у меня значение?
Дело в том что к какому мы словарю применяем этот метод, от этого и будет зависеть тип параметра, давайте вызовем этот метод у словаря другого типа:
Тип значения стал String.
Давайте теперь посмотрим как отработает этот метод, для каждого из словарей:
let oneNumber = integers.updateValue("two", forKey: 2)
Угадайте какой тип данных имеет данное свойство?! Правильно это String, потому что мы присвоили значение, которое вернул метод.
Еще один очень полезный метод removeValue(forKey:) , он удаляет пару ключ-значение для указанного ключа, давайте снова обратимся к примеру
Вы можете видеть, что мы удалили пару по ключу “Bob”, при этом если мы видим с права значение 45, то метод removeValue не только удаляет пару, но и возвращает значение по указанному ключу, а это значит что мы это значение можем присвоить свойству, и как то использовать:
let age = people.removeValue(forKey: "Bob")
свойство age будет целым числом равным 45.
Этих методов еще очень много, и каждый из них нет смысла рассматривать, главное уловить суть, что у коллекций есть методы и свойства, которые можно использовать. Мы с вами рассмотрели самые распространенные.
Давайте подведем итог.
Словарь это не упорядоченная коллекция (элементы располагаются хаотично), ключи словаря должны быть уникальными, то есть не повторятся, а значения могут повторятся. При этом все ключи должны быть одного типа, так же как и значения должны быть одного типа, но тип ключа может отличатся от типа значения.

Поддержите наш проект, и помогите изменить подход к обучению!


Развивайся вместе с нами
Поддержите наш проект, и помогите изменить подход к обучению!

Address List
Social Networks
Поддержите наш проект, и помогите изменить подход к обучению!

Social Networks