Искать несколько слов, игнорируя порядок в Swift

Вы можете проверить это через значение ASCII, если значение ascii s между 65 t0 90 или 97 to 122 будет символом.

0
задан Sh_Khan 15 January 2019 в 21:37
поделиться

2 ответа

Просто отфильтруйте элементы из filterArray, который содержит оба этих слова

let filterArray = ["Big green bubble", "Red bubble", "A bubble in green", "Small green bubble", "This bubble is green"]
let textString = "green bubble".lowercased()
let words = textString.components(separatedBy: " ")
let results = filterArray.map { [110].lowercased() }.filter { string in words.allSatisfy { string.components(separatedBy: " ").contains([110]) } }

print(results) /* ["Big green bubble", "A bubble in green", "Small green bubble", "This bubble is green"] */
0
ответ дан Robert Dresler 15 January 2019 в 21:37
поделиться

Вы можете использовать набор и проверить, равно ли количество пересечений количеству слов в запросе:

let filterArray = ["Big green bubble", "Red bubble", "A bubble in green", "Small green bubble", "This bubble is green"]
let textString = "green bubble"
let wordsSet = Set(textString.components(separatedBy: " "))
let queryResult = filterArray.filter {
    Set([110].components(separatedBy: " ")).intersection(wordsSet).count == wordsSet.count
}
queryResult  // "Big green bubble", "A bubble in green", "Small green bubble", "This bubble is green"]

Если вам нужен регистр символов, вы можете отобразить все слова в нижний регистр: [113 ]

let wordsSet = Set(textString.lowercased().components(separatedBy: " "))
let queryResult = filterArray
    .map { [111].lowercased() }
    .filter {
    Set([111].components(separatedBy: " "))
        .intersection(wordsSet).count == wordsSet.count
}
0
ответ дан Leo Dabus 15 January 2019 в 21:37
поделиться