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

Swift如何用高阶函数避免Dictionary存储空字典作为值?

实现方案

方案1:利用字典nil赋值特性(最贴合需求)

你可以直接通过三元运算将空字典转换为nil再赋值,Swift 字典在给键赋值nil时会自动忽略该键,完全不需要显式判断isEmpty,完全符合你提到的「利用字典不存储nil值特性」的要求:

var productDictionary = [String: Any]()
productDictionary["key 1"] = "value 1"
let subProductDictionary = [String: Any]()

productDictionary["subProductsKey"] = subProductDictionary.isEmpty ? nil : subProductDictionary

方案2:使用reduce(into:)高阶函数实现

如果你需要批量处理多个可能为空的子字典,可以用reduce统一过滤空字典后构建顶层字典,全程无显式if判断:

let subProductDictionary = [String: Any]()

let productDictionary = [String: Any](uniqueKeysWithValues: [
    ("key 1", "value 1" as Any),
    ("subProductsKey", subProductDictionary as Any)
].reduce(into: [(String, Any)]()) { result, kv in
    // 如果值是空字典类型,直接跳过不加入结果集
    if let dict = kv.1 as? [String: Any], dict.isEmpty {
        return
    }
    result.append(kv)
})

如果仅处理单个子字典,方案1的可读性和性能都更优,不需要为了使用高阶函数强行使用reduce,只有批量处理多个字段的场景下方案2的优势才会体现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:15:04