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
相关产品推荐
相关产品推荐

