Представление книг в виде массива кортежей с именованными параметрами title и тегами для названия книги и тегов соответственно.
let books:[(title:String, tags:String)] = [
(title: "The Da Vinci Code", tags: "Religion, Mystery, Europe"),
(title: "The Girl With the Dragon Tatoo", tags: "Psychology, Mystery, Thriller"),
(title: "Freakonomics", tags: "Economics, non-fiction, Psychology")
]
Вы хотите найти тег Psychology
let searchedTag = "Psychology"
Мы можем использовать функцию filter
, чтобы отфильтровать элементы в массиве книг, который содержит только искомый тег.
let searchedBooks = books.filter{ $0.tags.split(separator: ",").map{ return $0.trimmingCharacters(in: .whitespaces) }.contains( searchedTag ) }
print(searchedBooks)
Внутри метода фильтра мы создали массив элементов тега изтеги книги с использованием метода split(separator: Character)
.Затем, используя функцию map
, мы удаляем начальные и конечные пробелы из каждого тега.Наконец, используя метод .contains(element)
, мы проверяем, находится ли искомый тег в этом массиве.Возвращаются только кортежи, прошедшие этот тест, а остальные будут отфильтрованы.
Результат:
[(title: "Девушка с татуировкой дракона", теги:«Психология, Мистерия, Триллер»), (название: «Фрикономика», теги: «Экономика, фантастика, Психология»)]