web-dev-qa-db-ja.com

大文字と小文字を区別せずに文字列が配列に存在するかどうかを確認します

宣言:

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

それからこれ

contains(listArray, Word) 

Trueを返しますが、宣言が次の場合:

let Word = "Kashif"

比較では大文字と小文字が区別されるため、falseを返します。

この比較の大文字と小文字を区別しないようにするにはどうすればよいですか?

29
Kashif

使用できます

Word.lowercaseString 

文字列をすべて小文字に変換する

22
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以降

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

代わりに:

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

配列内の要素の位置を知りたい場合(述語に一致する要素が複数見つかる場合があります):

let indices = list.indices.filter { list[$0].caseInsensitiveCompare(Word) == .orderedSame }
print(indices)  // [0]
39
Leo Dabus

文字列が配列に存在するかどうかを確認するには(大文字と小文字を区別せずに)、使用してください

listArray.localizedCaseInsensitiveContainsString(Word) 

listArrayは配列の名前で、Wordは検索されたテキストです

このコードはSwift 2.2で動作します

9
ios

これを試して:

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

Swift 4

すべて(クエリと結果)の大文字と小文字を区別しないようにします。

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

Swift 3.0:

文字列配列で大文字と小文字を区別しない文字列を見つけるのは素晴らしいことですが、インデックスがない場合は、特定の状況ではクールになりません。

ここに私の解決策があります:

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

これは、配列内のオブジェクトのインデックスを持っている他の答えよりも優れているので、オブジェクトをつかんで、何でもできます:)

2
Josh O'Connor

複数のOptionsを持つ配列に文字列が存在するかどうかを確認するために(caseInsensitive、アンカー/検索は開始に制限されます)

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

私の例

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