web-dev-qa-db-fra.com

Vérifier si une chaîne existe dans un tableau sans tenir compte de la casse

Déclaration:

let listArray = ["kashif"]
let Word = "kashif"

ensuite ceci 

contains(listArray, Word) 

Renvoie true mais si déclaration est:

let Word = "Kashif"

alors, il retourne false car la comparaison est sensible à la casse. 

Comment rendre cette comparaison insensible à la casse? 

25
Kashif

vous pouvez utiliser 

Word.lowercaseString 

convertir la chaîne en caractères minuscules 

19
Charlie Hall
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 ou version ultérieure

if list.contains(where: {$0.caseInsensitiveCompare(Word) == .orderedSame}) {
    print(true)  // true
}

alternativement:

if list.contains(where: {$0.compare(Word, options: .caseInsensitive) == .orderedSame}) {
    print(true)  // true
}
34
Leo Dabus

Pour vérifier si une chaîne existe dans un tableau (sans tenir compte de la casse), veuillez utiliser 

listArray.localizedCaseInsensitiveContainsString(Word) 

où listArray est le nom du tableau et Word est le texte recherché.

Ce code fonctionne dans Swift 2.2

7
ios

Essaye ça:

let loword = Word.lowercaseString
let found = contains(listArray) { $0.lowercaseString == loword }
7
Mario Zannone

Swift 4

Rendez simplement tout (requêtes et résultats) insensible à la casse.

for item in listArray {
    if item.lowercased().contains(Word.lowercased()) {
        searchResults.append(item)
    }
}
2
hgale

Swift 3.0:

Trouver une chaîne insensible à la casse dans un tableau de chaînes est cool et tout, mais si vous n'avez pas d'index, il ne peut pas être cool dans certaines situations.

Voici ma solution:

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"                                             
}

C'est mieux que les autres réponses, car vous avez l'index de l'objet dans le tableau, vous pouvez donc saisir l'objet et faire ce que vous voulez :)

1
Josh O'Connor

Pour vérifier si une chaîne existe dans un tableau avec plus de Options (caseInsensitive, anchored/search est limité au début) 

en utilisant Foundation range(of:options:)

let list = ["kashif"]
let Word = "Kashif"


if list.contains(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
    print(true)  // true
}

if let index = list.index(where: {$0.range(of: Word, options: [.caseInsensitive, .anchored]) != nil}) {
    print("Found at index \(index)")  // true
}
1
Govind Kumawat

Mon exemple 

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()
}
0
Alexander Khitev