使用 NSPredicate 搜索字符串数组
Search array of array of strings with 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 要求数组中有一个精确的字符串匹配,而不是仅仅包含它。我真的希望主数组的子数组包含正在搜索的字符串。
我试过 "name CONTAINS[c] %@" 和 "SELF BEGINSWITH[c] %@" 都失败了。有谁知道使用什么谓词字符串来搜索数组的数组?
您需要使用 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
来自 official documentation for ANY
:
Specifies any of the elements in the following expression.
我有一个搜索数组数组的 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 要求数组中有一个精确的字符串匹配,而不是仅仅包含它。我真的希望主数组的子数组包含正在搜索的字符串。
我试过 "name CONTAINS[c] %@" 和 "SELF BEGINSWITH[c] %@" 都失败了。有谁知道使用什么谓词字符串来搜索数组的数组?
您需要使用 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
来自 official documentation for ANY
:
Specifies any of the elements in the following expression.