如何在Swift中将嵌套字典转换为平面字典?

问题描述 投票:0回答:1

我有一个嵌套字典:

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

我想用KeyPath获得一个扁平字典:

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

如何在Swift中制作它?

swift
1个回答
1
投票

试试这个:

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)
© www.soinside.com 2019 - 2024. All rights reserved.