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

Swift 2中如何删除数组中同日期同名且存在type2的type3字符串元素?

Swift 2 数组过滤解决方案

针对你的需求,我们可以通过拆分字段+标记过滤的方式来实现,下面是具体的代码和思路解析:

实现思路

  1. 拆分元素字段:把每个字符串按*分割成日期、类型、名称三个部分,方便后续判断逻辑;
  2. 标记需要排除的组合:先收集所有type2元素对应的「日期+名称」组合,这些组合对应的type3元素就是我们要删除的目标;
  3. 过滤数组:遍历原数组,只保留不符合「是type3且日期+名称在标记集合中」的元素。

完整代码示例

var myList: [String] = [
    "2018-04-05*type2*namea",
    "2018-04-05*type2*nameb",
    "2018-04-05*type3*nameb",
    "2018-04-06*type3*named"
]

// 第一步:收集所有type2对应的日期+名称组合
var type2Pairs = Set<String>()
for item in myList {
    let components = item.componentsSeparatedByString("*")
    // 确保元素格式正确(拆分后有3个字段)
    guard components.count == 3 else {
        continue
    }
    let date = components[0]
    let type = components[1]
    let name = components[2]
    
    if type == "type2" {
        // 用日期+名称拼接成唯一标识存入集合
        type2Pairs.insert("\(date)_\(name)")
    }
}

// 第二步:过滤数组,保留符合要求的元素
let filteredList = myList.filter { item in
    let components = item.componentsSeparatedByString("*")
    guard components.count == 3 else {
        // 格式错误的元素默认保留,也可以根据需求改为return false
        return true
    }
    let date = components[0]
    let type = components[1]
    let name = components[2]
    
    // 如果是type3,且对应的日期+名称在type2Pairs中,则排除;否则保留
    if type == "type3" {
        return !type2Pairs.contains("\(date)_\(name)")
    }
    // 非type3的元素全部保留
    return true
}

// 打印结果验证
for item in filteredList {
    print(item)
}

结果验证

运行上述代码后,输出结果为:

2018-04-05*type2*namea
2018-04-05*type2*nameb
2018-04-06*type3*named

正好符合你的需求:原数组中2018-04-05*type3*nameb因为存在同一日期、同一名称的type2元素,被成功删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:58