Menu
Coddy logo textTech

Группировка значений

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

Шаблон с индексом по умолчанию лежит в основе двух повседневных форм.

Счётчик частоты: подсчитывает, сколько раз встречается каждый ключ.

let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
    counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]

Группировка по категориям: собирайте значения по производному ключу:

let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
    byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]

Значением по умолчанию для случая группировки является пустой массив. Значение default: используется только при отсутствии ключа, после чего правая часть изменяет запись на месте.

challenge icon

Задание

Средне

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

Выведите в этом порядке:

  1. По одной строке для каждой длины слова, встречающейся во входных данных, отсортированных от shorter к большей, в формате <length>: <count>, где count — это количество слов такой длины
  2. Most common length: <n>, где n — длина с наибольшим количеством слов. При одинаковых значениях выбирайте shorter длину.

Для входных данных hi,hello,yo,hey,bonjour,bye результатом будет:

2: 2
3: 2
5: 1
7: 1
Most common length: 2

(Длины 2 и 3 встречаются по два раза. При равенстве выбирается shorter длина, поэтому выигрывает 2.)

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

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

// TODO: подсчитать слова по длине; вывести отсортированные; вывести самые частые (при ничьей: более короткие)
quiz iconПроверьте себя

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

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

Потренируйтесь самостоятельно: Песочница Swift