ios - 如何在swift中使用多个键的谓词搜索?
问题描述
我想应用带有名字和姓氏的搜索过滤器,并且我已经完成了单字段搜索,但我想同时应用搜索,即名字和姓氏。
var cityData = [[String: Any]]()
cityData.append(["id":1,"city":"Chicago","last_name":"Swire","first_name":"Sharlene"])
cityData.append(["id":1,"city":"Allahabad","last_name":"Singh","first_name":"Abhay"])
cityData.append(["id":1,"city":"Delhi","last_name":"Jaiswal","first_name":"Shikhar"])
let predicate = NSPredicate(format: "SELF contains[c] %@", searchTerm)
let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") }
但上面的代码只过滤名字,但我也需要过滤姓氏
解决方案
如果您想根据名字或姓氏查找城市,您可以像这样在过滤器操作中添加或条件
let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") || predicate.evaluate(with: $0["last_name"] as? String ?? "") }
请看下面的例子:
var cityData = [[String: Any]]()
cityData.append(["id":1,"city":"Chicago","last_name":"Swire","first_name":"Sharlene"])
cityData.append(["id":1,"city":"Allahabad","last_name":"Singh","first_name":"Abhay"])
cityData.append(["id":1,"city":"Delhi","last_name":"Jaiswal","first_name":"Shikhar"])
let predicate = NSPredicate(format: "SELF contains[c] %@", "l")
let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") || predicate.evaluate(with: $0["last_name"] as? String ?? "") }
print(searchData)
这将打印结果:
[["last_name": "Swire", "first_name": "Sharlene", "city": "Chicago", "id": 1], ["city": "Delhi", "last_name": "Jaiswal", "id": 1, "first_name": "Shikhar"]]
推荐阅读
- php - 在同一本地主机上调用 API 时出现 SSL 验证服务器证书错误(tls_process_server_certificate:certificate verify failed)
- python - 如何循环直到元素可点击
- java - 邮件将使用 smtp javax mail 进入垃圾邮件文件夹
- r - 用于手动回归的参数值的网格搜索组合的 Lapply 函数
- python - 尝试获取数据Python Django时输入错误
- php - 服务器端验证不检查 php 中的下一个字段
- android - 链接到 PDF 中的特定页面
- sql-server - 如何将 Oracle 表转换为 SQL Server 表
- python - bertseq2seq : RuntimeError: variable_scope module_1/ 未使用,但相应的 name_scope 已被占用
- java-8 - 具有按值升序排序的 Hashmap 的优先级队列