Как проводить поиск по символам в массиве структур?
У меня есть массив структур. У каждой структуры есть description, displaySymbol. Как производить поиск по символам? Надо вывести все элементы массива, в description и/или displaySymbol которых содержатся заданные символы.
Я только учу swift и не до конца понимаю, что присходит в этих функциях. Вы могли бы объяснить поподробнее?
Мне надо пройтись по массиву и вытащить все элементы в которых содержатся один или несколько заданных символов
Постараюсь.
Начну с поиска элемента в строке:
у вас есть переменная с неким строковым значением var mystring = "some test string" . Чтобы узнать - есть ли в вашей переменной некий символ можно написать так: mystring.contains("s"). Результатом последнего кода будет булевское значение true или false.
Теперь про фильтрация массива:
функция filter позволяет отфильтровать массив по, так называемому, предикату - функции которая описывает фильтрующий принцип, проверяя каждый элемент массива этим принципом . Те элементы массива для которых предикат (фильтрующий принцип) возвращает true - попадают в результат. В приведенном мной выше примере предикат отбирает только те элементы массива у которых длинна больше 3-х символов.
Давайте соединим эти две функции.
words.filter { word in return word.contains("s") && word.contains("a") }
по поводу предикатов в свифте почитайте отдельно, когда почувствуете в себе силы разобраться в них. В кратце: word, в примере, это очередной элемент из массива. То что идет после in это уже исполняемый блок кода. Можно записать в следующем виде:
words.filter { word in
var isContainingS = word.contains("s")
var isContainingA = word.contains("a")
return isContainingS && isContainingA }
briahas, с функцией contains я разобрался, но она ищет всего один символ, с filter пока нет.
Я использовал ваш пример. Если я вставлю две одинаковые буквы, то он вытаскивает даже элементы с одной буквой. Если же вбить разные, то он вроде как вытаскивает то, что нужно, но он опять же использует contains. Есть ли функция аналогичная contains, но которая принимает несколько символов?