使用NSPredicate搜索字符串数组的数组

时间:2015-08-20 17:42:04

标签: ios arrays swift nspredicate

我有一个搜索数组数组的NSSearchController。这个主数组的一个例子是

[["key1',"value1"],["key2","value2"]]

我的搜索功能如下:

func updateSearchResultsForSearchController(searchController: UISearchController) {
    for (key, val) in zip(self.keys, self.values) {
        pairs.append([key,val])
    }

    filteredKeys.removeAll(keepCapacity: false)
    filteredValues.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text)
    let searcher = (self.pairs as NSArray).filteredArrayUsingPredicate(searchPredicate)
    println(searcher)

    for matched in searcher {
        var appendedKey = matched[0] as! String
        var appendedValue = matched[1] as! String
        filteredKeys.append(appendedKey)
        filteredValues.append(appendedValue)
    }

    pairs.removeAll(keepCapacity: false)

    self.tableView.reloadData()
}

问题在于我的NSPredicate字符串,因为我正在搜索一个数组数组,SELF CONTAINS需要一个精确的字符串匹配才能在数组中而不是只包含它。我真的希望主数组的子数组包含被搜索的字符串。

我试过"命名CONTAINS [c]%@"并且" SELF BEGINSWITH [c]%@"两者都失败了有谁知道用于搜索数组数组的谓词字符串?

1 个答案:

答案 0 :(得分:3)

您需要使用ANY SELF

let pairs = [["key1","value1"],["key2","value2"]]
let searchPredicate = NSPredicate(format: "ANY SELF CONTAINS[c] %@", "lue2")
let searcher = (pairs as NSArray).filteredArrayUsingPredicate(searchPredicate)
println(searcher) // Prints the second element

来自ANY的{​​{3}}:

  

指定以下表达式中的任何元素。