我正在尝试搜索从JSON获得的字典数组中的值。我有tableViewController
UISearchResultsUpdating
。我找到了一个带字符串数组的例子:
func updateSearchResultsForSearchController(searchController: UISearchController)
{
filteredTableData.removeAll(keepCapacity: false)
let searchPredicate = NSPredicate(format: "SELF contains[c] %@", searchController.searchBar.text)
let array = tableData.filteredArrayUsingPredicate(searchPredicate)
filteredTableData = array as! [String]
self.tableView.reloadData()
}
我真的不知道如何在数组中进行搜索:
(
{
id = 3;
name = TestNewYork;
},
{
id = 2;
name = TestLA;
},
{
id = 1;
name = TestWashington;
}
)
我的tableData = []
和filteredTableData
也必须是数组
请帮忙!
答案 0 :(得分:6)
您可以使用简单的过滤功能来执行此操作...
tableData : [[String : String]] = ... // your JSON array of String, String dictionaries...
filteredTableData = tableData.filter{
dictionary in
return dictionary["name"] == filterString
}
无论如何都是这样的,不是写了一段时间的Swift。
你也可以将它包装在一个函数中......
func filter(array : [[String : String]], byString filterString : String) -> [[String : String]] {
return array.filter{
dictionary in
return dictionary["name"] == filterString
}
}
或者其他什么。尚未检查代码。如果它不起作用将会回来。
在Playground检查,这有效......
<强>更新强>
改为此...
let data = [
[
"id" : 3,
"name" : "a"
],
[
"id" : 4,
"name" : "b"
],
[
"id" : 5,
"name" : "c"
]
]
let filteredData = data.filter{
return $0["name"] == "b"
}
它有效。只是无法弄清楚如何包装一个函数。
如果你想匹配单词的开头......
let data = [
[
"id" : 3,
"name" : "Hello"
],
[
"id" : 4,
"name" : "Goodbye"
],
[
"id" : 5,
"name" : "Everybody"
]
]
let filteredData = data.filter{
let string = $0["name"] as! String
return string.hasPrefix("Goo")
}
如果你想要一个包含,你只需要在字符串中进行查找。
同样,我不是在这里。我在游乐场跑步检查......
对于包含搜索,您可以执行此操作...
let filteredData = data.filter{
let string = $0["name"] as! String
return string.rangeOfString("db") != nil
}