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

时间:2015-06-14 10:02:06

标签: arrays swift nsarray

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

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

searchToSearch = "go"

if contains(itemsArray, stringToSearch) {
    NSLog("Term Exists")
}
else {
    NSLog("Can't find term")
}

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

9 个答案:

答案 0 :(得分:23)

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

protocol DBViewAnimationTransitioning: class {
    var viewForAnimation: UIView? { get set }
}

然后您可以使用let itemsArray = ["Google", "Goodbye", "Go", "Hello"] contains(array, predicate) - 可选 rangeOfString() - 检查数组中的每个字符串 如果它包含搜索字符串:

.CaseInsensitiveSearch

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

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

println(itemExists) // true 

Swift 3的更新:

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

println(matchingTerms) // [Google, Goodbye, Go]

答案 1 :(得分:20)

试试这样。

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

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

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

答案 2 :(得分:10)

试试这样。

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)

<强> 输出

["Google", "Goodbye", "Go"]

答案 3 :(得分:1)

func filterContentForSearchText(_ searchText: String) {
   filteredString = itemsArray.filter({( item : String) -> Bool in
            return  item.lowercased().contains(searchText.lowercased())
    })
}

答案 4 :(得分:1)

在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.

答案 5 :(得分:0)

如果您只是检查某个项目是否存在于特定数组中,请尝试以下操作:

var a = [1,2,3,4,5]

if a.contains(4) {
    print("Yes, it does contain number 4")
}
else {
    print("No, it doesn't")
}

答案 6 :(得分:0)

在Swift 4中:

    let itemsArray = ["Google", "Goodbye", "Go", "Hello"]
    let searchString = "Go"
    let filterArray = itemsArray.filter({ { $0.range(of: searchString, options: .caseInsensitive) != nil}
    })
    print(filterArray)

答案 7 :(得分:0)

MARK:-Swift 5,Swift 4

FacesContext.getCurrentInstance().getViewRoot().getViewId();

答案 8 :(得分:0)

我最近遇到了同样的问题,不喜欢大多数答案, 这样解决了它:

let keywords = ["doctor", "hospital"] //your array

func keywordsContain(text: String) -> Bool { // text: your search text
    return keywords.contains { (key) -> Bool in
        key.lowercased().contains(text.lowercased())
    }
}

这还将正确触发“ doc”之类的搜索,上面的许多答案都不是,也是最佳实践。 contains()比first()更高效!= nil 来源:https://www.avanderlee.com/swift/performance-collections/