array - swift dictionary contains key
Compruebe si una cadena existe en un caso de matriz insensiblemente (7)
Declaración:
let listArray = ["kashif"]
let word = "kashif"
luego esto
contains(listArray, word)
Devuelve true pero si la declaración es:
let word = "Kashif"
luego devuelve falso porque la comparación es sensible a mayúsculas
¿Cómo hacer que esta comparación sea insensible?
Mi ejemplo
func updateSearchResultsForSearchController(searchController: UISearchController) {
guard let searchText = searchController.searchBar.text else { return }
let countries = Countries.getAllCountries()
filteredCountries = countries.filter() {
return $0.name.containsString(searchText) || $0.name.lowercaseString.containsString(searchText)
}
self.tableView.reloadData()
}
Para verificar si existe una cadena en una matriz (sin distinción entre mayúsculas y minúsculas), utilice
listArray.localizedCaseInsensitiveContainsString(word)
donde listArray es el nombre de matriz y palabra es su texto buscado
Este código funciona en Swift 2.2
Prueba esto:
let loword = word.lowercaseString
let found = contains(listArray) { $0.lowercaseString == loword }
SWIFT 3.0:
Encontrar una cadena que no distinga mayúsculas y minúsculas en una matriz de cadenas es genial y todo, pero si no tiene un índice, no puede ser bueno para ciertas situaciones.
Aquí está mi solución:
let stringArray = ["FOO", "bar"]()
if let index = stringArray.index(where: {$0.caseInsensitiveCompare("foo") == .orderedSame}) {
print("STRING /(stringArray[index]) FOUND AT INDEX /(index)")
//prints "STRING FOO FOUND AT INDEX 0"
}
Esto es mejor que las otras respuestas b / c, tiene un índice del objeto en la matriz, por lo que puede agarrar el objeto y hacer lo que quiera :)
puedes usar
word.lowercaseString
para convertir la cadena a todos los caracteres en minúscula
Swift 4
Simplemente haga que todo (consultas y resultados) sea insensible.
for item in listArray {
if item.lowercased().contains(word.lowercased()) {
searchResults.append(item)
}
}
let list = ["kashif"]
let word = "Kashif"
if contains(list, {$0.caseInsensitiveCompare(word) == NSComparisonResult.OrderedSame}) {
println(true) // true
}
Xcode 7.3.1 • Swift 2.2.1
if list.contains({$0.caseInsensitiveCompare(word) == .OrderedSame}) {
print(true) // true
}
Xcode 8 • Swift 3 o posterior
if list.contains(where: {$0.caseInsensitiveCompare(word) == .orderedSame}) {
print(true) // true
}
alternativamente:
if list.contains(where: {$0.compare(word, options: .caseInsensitive) == .orderedSame}) {
print(true) // true
}