I have dictionary [String: [Object]]
. Each object has .name
Is it possible to use .filter
on dictionary to return dictionary with only keys that contain filtered value ?
If I understand your question, you want the keys of a [String: [Object]]
dictionary where each Object
has a name
property 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 you want the dictionary key where an 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 with flatMap
and contains
let filteredKeys = dict.flatMap { (str, arr) -> String? in
if arr.contains({ $0.name == "two" }) {
return str
}
return nil
}
print(filteredKeys)
Solution with a loop
var filteredKeys = [String]()
for (key, value) in dict {
if value.contains({ $0.name == "two" }) {
filteredKeys.append(key)
}
}
print(filteredKeys)
Yes, but since you got a Dictionary with an array as value:
dictionary.flatMap({ $0.1.filter({ $0.name == "NameToBeEqual"}) })
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With