任何人都可以解释我如何在 swift 中使用谓词,或者对于嵌套字典和字典数组有一些更好的方式来做同样的事情?
我的程序中有一系列嵌套字典,需要使用不同的键进行过滤,或者在相同情况下需要使用多个键进行过滤,所以请在swift中为我提供一个电池解决方案,我可以像NSPredicate那样过滤它。 ç
例如,我有以下json的一组员工 -
[{
"name": "programmer",
"email": "abc@gmail.com",
"group": "A",
"epmloyement": {
"complany": "abc",
"salary": 20000
}
},
{
"name": "designer",
"email": "xyz@gmail.com",
"group": "A",
"epmloyement": {
"complany": "zyz",
"salary": 25000
}
},
{
"name": "tester",
"email": "aaa@gmail.com",
"group": "B",
"epmloyement": {
"complany": "xxx",
"salary": 15000
}
}]
我想要以下结果 - 如果我想要一系列字典,员工的工资大于2000 或者如果我想要一组字典,其中员工的组= A. 或者如果我想要一组字典,其中员工的团队= A和工资> 2000
答案 0 :(得分:3)
您可以在swift中使用任何Objective C apis。
var resultPredicate = NSPredicate(format: "name contains[c]%@",searchText)
filteredArray = arrayToFIlter.filtered(using: resultPredicate)
1) NSPredicate(format: "name = %@", demoText)
//ARRAY
2) NSPredicate(format: "name = %@ AND nickName = %@", argumentArray: [name, nickname])
// IF CONTAINS
3)NSPredicate(format: "name contains[c] %@", demoText)
//ARRAY
4) NSPredicate(format: "name contains[c] %@ AND nickName contains[c] %@", argumentArray: [name, nickname])
尝试使用数组filter:
方法
let digits = [1,4,10,15]
let even = digits.filter { $0 % 2 == 0 }
// [4, 10]
它非常直观,而且代码更少,更加快速。
你的查询:
//salary greater than 2000
a)let filteredArray = arrayDemo.filter({(($0["epmloyement"] as! Dictionary<String,Any>)["salary"] as! Int) > 2000})
//group = A and salary > 2000
b)let fa = arrayDemo.filter({(($0["epmloyement"] as! Dictionary<String,Any>)["salary"] as! Int) > 2000 && ($0["group"] as! String) == "A"})
答案 1 :(得分:1)
使用以下
过滤数组var filterArray = dicArray.filter { dic in
guard let epmloyement = dic["epmloyement"] as? [String: Any] else {
return false
}
guard let group = dic["group"] as? String else {
return false
}
if let salary = epmloyement["salary"] as? Int {
if (group == "A") && salary > 2000 {
return true
}
}
return false
}