You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift如何将[Dictionary<String, [String:Double]>.Element]转为[String:[String:Double]]

问题原因
  • 第一,你的decodedModel是try?返回的可选类型[JSONModel]?,未解包无法直接操作数组元素
  • 第二,flatMap用法不符合需求:你对数组元素调用flatMap返回单个键值对字典时,flatMap会把所有字典拆成键值对元组组成的数组,无法直接生成目标字典类型,所以报类型不匹配错误。
正确实现

有两种常用实现方案:

方案1:使用Dictionary(uniqueKeysWithValues:)(推荐,name无重复时使用)

先对decodedModel解包,再把每个元素映射为(name, model)的元组,直接传入字典构造方法即可:

// 先安全解包解码结果,解码失败时默认赋值为空字典
let simplifiedModel: [String: [String: Double]]
if let decodedModel = decodedModel {
    simplifiedModel = Dictionary(uniqueKeysWithValues: decodedModel.map { ($0.name, $0.model) })
} else {
    simplifiedModel = [:]
}

也可以用可选链简写:

let simplifiedModel = decodedModel.map { Dictionary(uniqueKeysWithValues: $0.map { ($0.name, $0.model) }) } ?? [:]

方案2:使用reduce(into:)(兼容name重复的场景)

如果存在name重复的场景,你可以自定义重复值的处理逻辑:

let simplifiedModel = decodedModel.reduce(into: [String: [String: Double]]()) { result, item in
    // 重复name时默认覆盖旧值,需要保留旧值就加判断 if result[item.name] == nil
    result[item.name] = item.model
} ?? [:]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:54:03