Alexey K Alexey K - 9 months ago 48
Swift Question

Filter dictionary with arrays as value

I have dictionary

[String: [Object]]
. Each object has

Is it possible to use
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({ $ == "two" }) }.map { $0.0 }


Solution with flatMap and contains

let filteredKeys = dict.flatMap { (str, arr) -> String? in
    if arr.contains({ $ == "two" }) {
        return str
    return nil


Solution with a loop

var filteredKeys = [String]()

for (key, value) in dict {
    if value.contains({ $ == "two" }) {