You need to enable JavaScript to run this app. Swift:用map/reduce/flatMap将值为数组的字典合并为同类型单数组
优惠活动
大模型
产品
解决方案
定价
更多

Swift:用map/reduce/flatMap将值为数组的字典合并为同类型单数组

Swift 字典值数组合并为一维数组的函数式实现

核心需求

将字典m中所有存储的字符串子数组合并为单一一维数组,替代手写循环append的冗长写法。

可选实现方案

最简洁的一行实现

let result = m.values.flatMap { $0 }

逻辑拆解:

  • 直接调用字典的values属性,获取所有值组成的二维序列
  • flatMap会遍历序列中每个子数组,自动将所有子数组的元素展平拼接为一维数组,无多余的临时数组创建,执行效率和手写循环一致

基于reduce的函数式写法

贴合函数式方法思路,高效实现代码:

let result = m.values.reduce(into: [String]()) { $0.append(contentsOf: $1) }

逻辑拆解:

  • 以空[String]数组作为初始累加器
  • 遍历values中的每个子数组,直接将整个子数组的内容追加到累加器中,全程只有一个最终的目标数组,没有中间临时数组的内存开销

基于map + joined的实现

如果需要使用map方法,可以搭配序列的joined()完成展平:

let result = Array(m.map(\.value).joined())

注意:这种写法效率略低于flatMap和reduce版本,因为map阶段会先完整生成一个二维数组,再做连接操作。

补充说明

字典本身是无序存储结构,所有遍历方式得到的最终元素顺序,和手写for-in遍历字典的顺序完全一致,不会固定按照key的字典序排列。


内容的提问来源于stack exchange,提问作者xceph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 16:36:04