Разделение и объединение
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 4 из 56.
Два повседневных инструмента для работы с текстом с разделителями. Оба они входят в состав Foundation, которая уже импортирована.
components(separatedBy:) разбивает строку на массив String по любому переданному разделителю:
let csv = "red,green,blue"
let parts = csv.components(separatedBy: ",")
print(parts) // ["red", "green", "blue"]Обратной операцией является joined(separator:) для любого [String]:
let words = ["swift", "is", "fun"]
let line = words.joined(separator: " ")
print(line) // "swift is fun"Вы часто будете комбинировать их: разделять, преобразовывать с помощью map, объединять обратно. Результат map для [String] — это по-прежнему [String], поэтому joined работает напрямую.
Задание
ЛегкоПрочитайте одну строку ввода: список слов, разделенных запятыми.
Выведите три строки:
- Количество слов после разделения по символу
, - Слова, объединенные снова с помощью
>(пробел, знак "больше", пробел), в верхнем регистре - Самое длинное слово из списка (после разделения). Если два слова имеют одинаковую длину, используйте то, которое встречается первым.
Для входных данных red,green,blue выводом будет:
3
RED > GREEN > BLUE
greenШпаргалка
Разделите строку на массив с помощью components(separatedBy:):
let parts = "red,green,blue".components(separatedBy: ",")
// ["red", "green", "blue"]Объедините массив строк с помощью joined(separator:):
let line = ["swift", "is", "fun"].joined(separator: " ")
// "swift is fun"Распространенный паттерн — разделение, преобразование с помощью map, объединение:
let result = "red,green,blue"
.components(separatedBy: ",")
.map { $0.uppercased() }
.joined(separator: " > ")
// "RED > GREEN > BLUE"Попробуйте сами
let line = readLine()!
let words = line.components(separatedBy: ",")
// TODO: вывести count, объединенные в верхнем регистре через " > ", первое самое длинное слово
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря