Как преобразовать вложенный словарь в плоский словарь в Swift? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть вложенный словарь:

let dictionary1 = [
        "dof": [
            "two": "value"
        ],
        "cat" : [
            "fe": [
                "wefwef": "f"
            ]
        ]
    ]

И я хочу получить плоский словарь с KeyPath:

let dictionary2 = [
    "dot.two": "value"
    "cat.fe.wefwef": "f"
]

Как сделать это в Swift?

1 Ответ

1 голос
/ 07 апреля 2019

Попробуйте это:

func flatten(dictionary: [String: Any]) -> [String: Any] {
  func flattenRec(output: inout [String: Any], keyPath: String, value: Any) {
    if value is String {
      output[keyPath] = value
    }
    if let dict = value as? [String: Any] {
      dict.forEach { key, value in
        flattenRec(output: &output, keyPath: "\(keyPath).\(key)", value: value)
      }
    }
  }

  var outputDict = [String: Any]()

  dictionary1.forEach { key, value in
    flattenRec(output: &outputDict, keyPath: key, value: value)
  }

  return outputDict
}

let output = flatten(dictionary: dictionary1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...