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

如何从数组中提取重复对象并保留inUse为true的实例

Swift数组重复对象处理方案

1. 获取所有重复对象

先按name字段对数组分组,筛选出元素数量大于1的分组,展开这些分组的元素后按name排序,就能得到目标结果:

// 按name字段分组
let groupedByName = Dictionary(grouping: dogs) { $0.name }
// 筛选重复分组并展开元素,最后按name排序
let duplicateDogs = groupedByName
    .filter { $0.value.count > 1 }
    .flatMap { $0.value }
    .sorted { $0.name < $1.name }

// 打印名称验证结果
print(duplicateDogs.map { $0.name }.joined(separator: ", "))
// 输出:Teddy, Teddy, Browny, Browny

2. 保留inUse为true的对象,删除其余

基于分组结果,对每个重复分组筛选出inUse为true的对象,确保每个name只保留一个有效实例:

let filteredDogs = groupedByName
    .filter { $0.value.count > 1 }
    .compactMap { group in
        // 从分组中取出第一个inUse为true的对象
        group.value.first { $0.inUse }
    }
    .sorted { $0.name < $1.name }

// 打印名称验证结果
print(filteredDogs.map { $0.name }.joined(separator: ", "))
// 输出:Teddy, Browny

如果需要更直观的对象打印效果,可以给Dog模型补充自定义描述:

struct Dog: CustomStringConvertible {
    let name: String
    let inUse: Bool
    
    var description: String {
        "\(name)(\(inUse))"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:25:01