arrays - Swift:将一组字典扁平化为一个字典

标签 arrays swift dictionary functional-programming flatmap

在 Swift 中,我试图将一组字典扁平化为一个字典 即

let arrayOfDictionaries = [["key1": "value1"], ["key2": "value2"], ["key3": "value3", "key4": "value4"]]


//the end result will be:   
 flattenedArray = ["key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4"]

我尝试过使用 flatmap,但返回结果的类型是 [(String, AnyObject)] 而不是 [String, Object]

let flattenedArray = arrayOfDictionaries.flatMap { $0 }
// type is [(String, AnyObject)]

所以我有两个问题:

  • 为什么返回类型 [(String, AnyObject)]?括号是什么意思?

  • 如何达到预期的结果?

编辑:我更喜欢使用 Swift 的 map/flatmap/reduce 等函数式方法,而不是 for 循环

最佳答案

what do the brackets mean?

这与逗号而不是冒号一起应该提供第一个线索:括号意味着您将获得一个元组数组。由于您正在寻找字典,而不是数组,这告诉您需要将元组序列(键值对)转换为单个字典。

How do I achieve the desired result?

一种方法是使用reduce,如下所示:

let flattenedDictionary = arrayOfDictionaries
    .flatMap { $0 }
    .reduce([String:String]()) { (var dict, tuple) in
        dict.updateValue(tuple.1, forKey: tuple.0)
        return dict
    }

关于arrays - Swift:将一组字典扁平化为一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56876259/

相关文章:

swift - CAShapeLayer 形状可以在 subview 中居中吗?

某个字符的Swift 4字符串范围

ios - 如何在 iOS 中通过触摸来回移动对象

java - 如何计算一个对象使用了多少 RAM?

java - 如何读取和排序仅由空格分隔的数据?

javascript - 为什么Javascript unshift方法添加引号?

C# 到 Java - 字典?

c# - 使用反射获取基类的 protected 属性值

javascript - 使用 Javascript 将文件读入数组 - 似乎无法使其工作

c++ - 在方程式中使用二维数组