检查数组是否包含Swift中字符串的一部分?

Dan*_*all 18 arrays nsarray swift

我有一个包含许多字符串的数组.我已经使用contains()(见下文)来检查数组中是否存在某个字符串但是我想检查字符串的一部分是否在数组中?

itemsArray = ["Google, Goodbye, Go, Hello"]

searchToSearch = "go"

if contains(itemsArray, stringToSearch) {
    NSLog("Term Exists")
}
else {
    NSLog("Can't find term")
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只是检查数组中是否存在整个值,但我想找到 "Google, Google and Go"

Ami*_*t89 25

试试这样吧.

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
})
Run Code Online (Sandbox Code Playgroud)

filteredStrings 将包含具有匹配子字符串的字符串列表.

在Swift中,Arraystruct提供了filter方法,它将根据过滤文本条件过滤提供的数组.

  • 在 Swift 4.0 rangeOfString 更改为 range(of: "string") 并且 lowercaseString 更改为 lowerCased() (2认同)

Mar*_*n R 25

首先,您已经定义了一个包含单个字符串的数组.你可能想要的是什么

let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
Run Code Online (Sandbox Code Playgroud)

然后你可以使用contains(array, predicate)rangeOfString()- 可选地 .CaseInsensitiveSearch- 来检查数组中的每个字符串是否包含搜索字符串:

let itemExists = contains(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(itemExists) // true 
Run Code Online (Sandbox Code Playgroud)

或者,如果您想要一个具有匹配项而不是yes/no结果的数组:

let matchingTerms = filter(itemsArray) {
    $0.rangeOfString(searchToSearch, options: .CaseInsensitiveSearch) !=  nil
}

println(matchingTerms) // [Google, Goodbye, Go]
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)


Ash*_*k R 13

试试这样吧.

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)
Run Code Online (Sandbox Code Playgroud)

产量

["Google", "Goodbye", "Go"]
Run Code Online (Sandbox Code Playgroud)


Anu*_*ugh 10

在具有更好可读性的 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.
Run Code Online (Sandbox Code Playgroud)


Sha*_*med 5

马克:- 斯威夫特 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
}
Run Code Online (Sandbox Code Playgroud)