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

