簡體   English   中英

將一組字典扁平化為一個字典

[英]Flatten an array of dictionaries to one dictionary

我有一組字典,其中columnIdcolumnValue是一對。 現在我需要將它展平為columnId作為鍵和columnValue作為它的值。 如何處理 swift 高階函數?

let arrayOfDictionaries = [["columnId": 123, "columnValue": "sample text"], ["columnId": 124, "columnValue": 9977332]]

//The end result should be:   
flattenedDictionary: [String: Any] = ["123": "sample text", "124": 9977332]

注意:結果字典將采用[String: Any]的形式

這會起作用:

func flatten(_ pairs: [[String: Any]]) -> [String: Any] {
    pairs.reduce(into: [String: Any]()) {
        if let id = $1["columnId"] as? Int, let value = $1["columnValue"] {
            $0["\(id)"] = value
        }
    }
}

您可以分兩步完成此操作;

  1. 使用compactMap將輸入數組轉換為鍵值對序列
  2. 使用Dictionary(uniqueKeysWithValues:)將序列轉換回字典
let arrayOfDictionaries = [["columnId": 123, "columnValue": "sample text"], ["columnId": 124, "columnValue": 9977332]]

let tupleArray:[(String,Any)] = arrayOfDictionaries.compactMap { dict in
    guard let id = dict["columnId"], let value = dict["columnValue"] else {
        return nil
    }
    return ("\(id)",value)
}

let flattenedDictionary: [String: Any] = Dictionary(uniqueKeysWithValues: tupleArray)

請注意,如果存在重復鍵,此代碼將拋出異常。 您應該采取措施確保columnId值是唯一的,或者使用Dictionary(keysAndValues:, uniquingKeysWith:)來解決 id 沖突。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM