Menu
Coddy logo textTech

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

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 12 из 56.

Словарь — это неупорядоченная коллекция пар ключ/значение. Тип ключа и тип значения фиксируются при его создании.

var prices: [String: Int] = [
    "apple": 1,
    "bread": 3,
    "milk":  4
]
print(prices.count)            // 3
print(prices.isEmpty)          // false

Аннотация типа [String: Int] читается как «ключи — это String, значения — это Int». Swift обычно может вывести его из литерала, но явное указание делает пустые инициализаторы однозначными:

var counts: [String: Int] = [:]
// в отличие от пустого массива, которому тоже понадобился бы тип

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

challenge icon

Задание

Легко

Прочитайте три строки ввода: имя, страну и целое число (возраст). Создайте один словарь с именем person с ключами типа String и значениями, которые вы прочитали (возраст остается Int, вам понадобится гетерогенный тип значений, см. подсказку).

Выведите три строки:

  1. Количество записей в словаре
  2. name=<value>, используя доступ по индексу (subscript access)
  3. country=<value>, используя доступ по индексу (subscript access)

Используйте печатную форму: когда вы читаете значение словаря как Any, выполните принудительное извлечение (force-unwrap) перед печатью.

Для входных данных Alice / UK / 30 вывод будет следующим:

3
name=Alice
country=UK

Шпаргалка

Словарь (dictionary) хранит пары «ключ — значение» с фиксированными типами ключей и значений:

var prices: [String: Int] = [
    "apple": 1,
    "bread": 3,
    "milk":  4
]
print(prices.count)   // 3
print(prices.isEmpty) // false

Создание пустого словаря с явным указанием типа:

var counts: [String: Int] = [:]

Используйте [String: Any] для разнородных типов значений (смешанных типов):

var person: [String: Any] = [
    "name": "Alice",
    "age": 30
]

Попробуйте сами

let name = readLine()!
let country = readLine()!
let age = Int(readLine()!)!

// TODO: создайте [String: Any] под названием person, выведите count, name, country
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком