If I understand your question, you need dictionary keys[String: [Object]] , where everyone Objecthas a property name, and this property has a given value.
struct Obj {
let name: String
}
let o1 = Obj(name: "one")
let o2 = Obj(name: "two")
let o3 = Obj(name: "three")
let dict = ["a": [o1, o2], "b": [o3]]
Now let's say that you need a dictionary key, where the object has “two” for its name:
Solution with filter
let filteredKeys = dict.filter { (key, value) in value.contains({ $0.name == "two" }) }.map { $0.0 }
print(filteredKeys)
Solution flatMapandcontains
let filteredKeys = dict.flatMap { (str, arr) -> String? in
if arr.contains({ $0.name == "two" }) {
return str
}
return nil
}
print(filteredKeys)
Loop solution
var filteredKeys = [String]()
for (key, value) in dict {
if value.contains({ $0.name == "two" }) {
filteredKeys.append(key)
}
}
print(filteredKeys)
source
share