Проверьте, содержит ли массив часть строки в 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"
Ответы
Ответ 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.