Menu
Coddy logo textTech

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

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

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

var colors: Set<String> = ["red", "green", "blue", "red"]
print(colors.count)              // 3 (дубликат "red" отбрасывается)

Аннотация типа Set<String> обязательна в литеральной форме, так как ["a", "b"] само по себе будет интерпретировано как Array.

Три основные операции: contains, insert и remove. Последние две возвращают информацию о том, было ли изменение значимым.

colors.insert("yellow")         // добавляет его
colors.insert("red")            // уже есть, никакого эффекта
colors.contains("green")        // true
colors.remove("blue")           // возвращает "blue" или nil, если отсутствует

Создание множества из массива удаляет дубликаты за один шаг:

let unique = Set([1, 2, 2, 3, 3, 3])
// 3 элемента, точный порядок не гарантируется
challenge icon

Задание

Новичок

Прочитайте одну строку ввода: список слов, разделенных запятыми (возможно, с дубликатами).

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

  1. Количество уникальных слов (используйте Set)
  2. Уникальные слова, отсортированные по алфавиту и разделенные ,
  3. true, если ввод содержит слово swift, иначе false (используйте contains)

Для ввода swift,ruby,go,swift,go,rust результатом будет:

4
go,ruby,rust,swift
true

Шпаргалка

Set (Множество) – неупорядоченная коллекция уникальных значений. Аннотация типа обязательна при использовании синтаксиса литерала массива:

var colors: Set<String> = ["red", "green", "blue", "red"]
print(colors.count) // 3 (дубликат удален)

Основные операции:

colors.insert("yellow")      // добавляет элемент
colors.contains("green")     // true
colors.remove("blue")        // возвращает "blue" или nil, если отсутствует

Создание множества из массива для удаления дубликатов:

let unique = Set([1, 2, 2, 3, 3, 3]) // 3 элемента

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

let words = readLine()!.components(separatedBy: ",")

// TODO: удалить дубликаты через Set, вывести count, отсортировать и объединить (sorted joined), проверить, содержит ли "swift"
quiz iconПроверьте себя

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

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