2015-07-09 10 views
16

Oświadczenie:Sprawdź, czy ciąg istnieje w przypadku tablicy insensitively

let listArray = ["kashif"] 
let word = "kashif" 

wówczas

contains(listArray, word) 

Zwraca true, ale jeśli deklaracja jest:

let word = "Kashif" 

następnie zwraca false, ponieważ podczas porównywania rozróżniana jest wielkość liter.

Jak sprawić, aby ta wielkość porównania była niewrażliwa?

+0

Dziękuję wszystkim dobrym odpowiedziom. Dodatkowym krokiem, który musiałem zrobić, było przejście do mojego źródłowego pliku tekstowego i przekonwertowanie wszystkiego w nim również na małe litery. – Kashif

Odpowiedz

14

można użyć

word.lowercaseString 

przekonwertować ciąg znaków do wszystkich małych

6

Spróbuj tego:

let loword = word.lowercaseString 
let found = contains(listArray) { $0.lowercaseString == loword } 
24
let listArray = ["kashif"] 
let word = "Kashif" 

if contains(listArray, {$0.caseInsensitiveCompare(word) == NSComparisonResult.OrderedSame}) { 
    println(true) // true 
} 

Xcode 7.3.1 • Swift 2.2.1

if listArray.contains({$0.caseInsensitiveCompare(word) == .OrderedSame}) { 
    print(true) // true 
} 

Xcode 8 • Swift 3 lub później

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

Mój przykład

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() 
} 
4

Dla sprawdzenia, czy ciąg istnieje w tablicy (przypadek insensitively), proszę użyć

listArray.localizedCaseInsensitiveContainsString(word) 

gdzie listArray to nazwa tablicy i słowo to poszukiwany tekst

Ten kod działa w Swift 2.2

+1

Edytuj i uzyskaj więcej informacji.Tylko kod i odpowiedź "spróbuj tego" są odradzane, ponieważ nie zawierają treści do wyszukiwania i nie wyjaśniają, dlaczego ktoś powinien "spróbować tego". – abarisone

+0

http://stackoverflow.com/a/26175437/419348 'localizedCaseInsensitiveContainsString' wydaje się być metodą w' NSString'. Ale nie podoba mi się to podpis metody. Może 'zawieraIgnoringCase' jest lepszym nazywaniem. – AechoLiu

1

SWIFT 3,0:

Znalezienie uwzględnia wielkości liter ciąg w tablicy ciągów jest cool iw ogóle, ale jeśli nie masz indeks nie może być fajny w pewnych sytuacjach.

Oto moje rozwiązanie:

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

To jest lepsze niż innych odpowiedzi b/c masz indeks obiektu w tablicy, więc można pobrać obiekt i zrobić cokolwiek proszę :)

+1

To powinna być zaakceptowana odpowiedź! –

-1

Swift 4

Wystarczy dokonać wszystkiego (zapytania i wyniki) uwzględnia wielkości liter.

for item in listArray { 
    if item.lowercased().contains(word.lowercased()) { 
     searchResults.append(item) 
    } 
} 
+0

zawiera() powinno być równe(), tutaj. – eriksoe

+0

Wszystko zależy od tego, jak chcesz, aby wyszukiwanie zadziałało. W przypadku zapytań wolę zawierać. – sconewolf

Powiązane problemy