我有字符串数组 let filterClassName = ["A","B"]
现在我有了字典,它看起来像:
var responseArray: [[String: Any]] = []
responseArray.append(["id": 1,"name": "Prateek", "className": "A"])
responseArray.append(["id": 1,"name": "rateek", "className": "B"])
responseArray.append(["id": 3,"name": "ateek", "className": "C"])
responseArray.append(["id": 4,"name": "teek", "className": "D"])
responseArray.append(["id": 5,"name": "eek", "className": "A"])
responseArray.append(["id": 6,"name": "ek", "className": "E"])
现在从 responseArray
这是我的字典,我想要所有与我在 filterClassName
中提到的 className 相匹配的值
所以,我应该得到以下数组的输出:
["id": 1,"name": "Prateek", "className": "A"],["id": 1,"name": "rateek", "className": "B"],["id": 5,"name": "eek", "className": "A"]
提前致谢!
这是我试过的:
for value in filterClassName {
let cal = responseArray.filter { (($0["className"] as! String).contains(value)) }
for value in cal {
let valuesss = value
print ("valuesss" + String(describing: valuesss))
}
}
我上面的回答是非常基本的,但我希望这样的东西能起作用:
let cal = responseArray.filter { (($0["className"] as! String).contains(filterClassName)) }
简而言之,单行过滤,没有 for 循环,因为我讨厌它们!
最佳答案
你很接近,但反过来:
let filteredItems = responseArray.filter{ filterClassName.contains($0["className"] as! String) }
但是——正如 Hamish 在评论中提到的——使用自定义结构更有效。
您的代码:
let filterClassName = ["A","B"]
var responseArray: [[String: Any]] = []
responseArray.append(["id": 1,"name": "Prateek", "className": "A"])
responseArray.append(["id": 1,"name": "rateek", "className": "B"])
responseArray.append(["id": 3,"name": "ateek", "className": "C"])
responseArray.append(["id": 4,"name": "teek", "className": "D"])
responseArray.append(["id": 5,"name": "eek", "className": "A"])
responseArray.append(["id": 6,"name": "ek", "className": "E"])
要添加的代码:
struct Student {
let name, className : String
let id : Int
init?(dictionary: [String:Any]) {
guard let id = dictionary["id"] as? Int,
let name = dictionary["name"] as? String,
let className = dictionary["className"] as? String else { return nil }
self.id = id
self.name = name
self.className = className
}
}
let students = responseArray.flatMap { Student(dictionary:$0) }
let filteredItems = students.filter{ filterClassName.contains($0.className) }
print(filteredItems)
关于arrays - 在 Swift 3 中比较字符串数组和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44889263/