gpt4 book ai didi

swift - 在字典数组中搜索

转载 作者:搜寻专家 更新时间:2023-11-01 05:58:51 26 4
gpt4 key购买 nike

我正在尝试搜索从 JSON 获取的字典数组中的值。我有一个带有 UISearchResultsUpdatingtableViewController。我找到了一个字符串数组的例子:

    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 也必须是数组

请帮忙!

最佳答案

您可以使用一个简单的过滤器函数来执行此操作...

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 中检查过,这有效...

enter image description here

更新

改成了这个...

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

如果你想要一个包含,你只需要在字符串中进行查找。

再说一次,我没有说谎。我正在 Playground 中运行它以检查...

对于包含搜索,您可以这样做...

let filteredData = data.filter{
let string = $0["name"] as! String

return string.rangeOfString("db") != nil
}

enter image description here

关于swift - 在字典数组中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30188914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com