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

Swift按属性合并对象数组的实现方法

按Type合并Filter数组的实现方案

实现思路

先通过reduce将原数组按type属性分组,收集每个类型对应的所有value;再通过map遍历分组结果,创建新的Filter实例并将同类型的value用|拼接。

完整代码示例

首先补充Filter类的构造器(方便初始化实例):

class Filter {
    var type: String?
    var value: String?
    
    init(type: String?, value: String?) {
        self.type = type
        self.value = value
    }
}

处理逻辑:

// 初始数组
let initialFilters = [
    Filter(type: "size", value: "10"),
    Filter(type: "size", value: "20"),
    Filter(type: "color", value: "green")
]

// 1. 按type分组,收集对应value列表
let groupedFilters = initialFilters.reduce(into: [String: [String]]()) { result, filter in
    // 过滤type或value为空的无效元素
    guard let type = filter.type, let value = filter.value else { return }
    result[type, default: []].append(value)
}

// 2. 转换为合并后的Filter数组
let mergedFilters = groupedFilters.map { type, values in
    Filter(type: type, value: values.joined(separator: "|"))
}

代码说明

  • reduce(into:):遍历原数组,将每个Filter的type作为字典key,对应的value添加到key对应的数组中,default: []确保首次遇到新type时自动创建空数组。
  • map:遍历分组后的字典,对每个type对应的value数组用joined(separator: "|")拼接成字符串,再创建新的Filter实例。
  • 额外处理:通过guard过滤掉type或value为nil的无效元素,避免影响最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:20:14