Подтвердить что ты не робот

Проверьте, содержит ли массив часть строки в Swift?

У меня есть массив, содержащий несколько строк. Я использовал contains() (см. Ниже), чтобы проверить, существует ли определенная строка в массиве, однако я хотел бы проверить, есть ли часть строки в массиве?

itemsArray = ["Google, Goodbye, Go, Hello"]

searchToSearch = "go"

if contains(itemsArray, stringToSearch) {
    NSLog("Term Exists")
}
else {
    NSLog("Can't find term")
}

Вышеприведенный код просто проверяет, присутствует ли значение в массиве в целом, однако я хотел бы найти "Google, Google and Go"

4b9b3361

Ответ 1

Попробуйте это.

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
let searchToSearch = "go"

let filteredStrings = itemsArray.filter({(item: String) -> Bool in

     var stringMatch = item.lowercaseString.rangeOfString(searchToSearch.lowercaseString)
     return stringMatch != nil ? true : false
})

filteredStrings будет содержать список строк, имеющих соответствующие подстроки.

В Swift Array struct предоставляет метод фильтрации, который будет фильтровать предоставленный массив на основе критериев фильтрации текста.

Ответ 2

Прежде всего, вы определили массив с одной строкой. Вероятно, вам нужно

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]

Затем вы можете использовать contains(array, predicate) и rangeOfString() - при необходимости с помощью .CaseInsensitiveSearch - проверить каждую строку в массиве если он содержит строку поиска:

let itemExists = contains(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(itemExists) // true 

Или, если вам нужен массив с соответствующими элементами вместо да/нет Результат:

let matchingTerms = filter(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(matchingTerms) // [Google, Goodbye, Go]

Обновление для Swift 3:

let itemExists = itemsArray.contains(where: {
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil
})
print(itemExists)

let matchingTerms = itemsArray.filter({
    $0.range(of: searchToSearch, options: .caseInsensitive) != nil
})
print(matchingTerms)

Ответ 3

Попробуйте это.

Swift 3.0

import UIKit

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]

var filterdItemsArray = [String]()


func filterContentForSearchText(searchText: String) {
    filterdItemsArray = itemsArray.filter { item in
        return item.lowercased().contains(searchText.lowercased())
    }
}

filterContentForSearchText(searchText: "Go")
print(filterdItemsArray)

Выход

["Google", "Goodbye", "Go"]

Ответ 4

func filterContentForSearchText(_ searchText: String) {
   filteredString = itemsArray.filter({( item : String) -> Bool in
            return  item.lowercased().contains(searchText.lowercased())
    })
}

Ответ 5

Если вы просто проверяете, существует ли элемент в определенном массиве, попробуйте это:

var a = [1,2,3,4,5]

if a.contains(4) {
    print("Yes, it does contain number 4")
}
else {
    print("No, it doesn't")
}

Ответ 6

МАРКА: - Свифт 5, Свифт 4

//MARK:- You will find the array when its filter in "filteredStrings" variable you can check it by count if count > 0 its means you have find the results

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
let searchToSearch = "go"

let filteredStrings = itemsArray.filter({(item: String) -> Bool in

    let stringMatch = item.lowercased().range(of: searchToSearch.lowercased())
    return stringMatch != nil ? true : false
})
print(filteredStrings)


if (filteredStrings as NSArray).count > 0
{
    //Record found
    //MARK:- You can also print the result and can do any kind of work with them
}
else
{
    //Record Not found
}

Ответ 7

В Swift 4:

    let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
    let searchString = "Go"
    let filterArray = itemsArray.filter({ { $0.range(of: searchString, options: .caseInsensitive) != nil}
    })
    print(filterArray)

Ответ 8

В Swift 5 с лучшей читабельностью:

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
let searchString = "Googled"

let result = itemsArray.contains(where: searchString.contains)
print(result) //prints true in the above case.