Swift - 使用 map/reduce/flatmap 将数组字典减少为相同类型的单个数组

Posted

技术标签:

【中文标题】Swift - 使用 map/reduce/flatmap 将数组字典减少为相同类型的单个数组【英文标题】:Swift - Reducing a Dictionary of Arrays to a single array of same type using map/reduce/flatmap 【发布时间】:2021-04-30 10:13:38 【问题描述】:

给定这样的输入:

let m = ["one": ["1","2","3"],
         "two":["4","5"]
    ]

如何使用 map/reduce 来生成如下输出:

["1","2","3","4","5"]

我不是很敏捷,正在尝试学习它,但我似乎无法找到一种有效的方法来完成这个简单的操作。我的详细方法是这样的:

var d = [String]()

for (key, value) in m 
    value.forEach  (s) in
        d.append(s)
    

print(d)

我确定这可以是 1 班轮,有人可以帮忙吗?

【问题讨论】:

你会在这里遇到一个大问题:字典没有排序。 ...但如果这对您来说不是问题,您的单行代码将是 m.values.flatMap $0 等效:Array(m.values.joined()) 谢谢,对我来说顺序并不重要。亚历山大的回答正是我想要做的。 【参考方案1】:

您只需要一个flatMap

let result = dict.flatMap  _, values in values 

【讨论】:

dict.flatMap $1 @MartinR 我更喜欢dict.flatMap(\.value) ***.com/a/63515834/2303865 Swift 就像 Perl:TIMTOWTDI

以上是关于Swift - 使用 map/reduce/flatmap 将数组字典减少为相同类型的单个数组的主要内容,如果未能解决你的问题,请参考以下文章

swift 使用swift获取数据使用情况

我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

Swift初窥--使用Swift实现TableView

Swift : 使用多个 swift 文件或仅使用一个 viewController?保持清洁

如何使用 Swift Package Manager `swift build` 命令构建 Swift Package 的优化版本

在 swift 项目中集成 swift 框架,都使用 cocoapods