Swift 2中如何删除数组中同日期同名且存在type2的type3字符串元素?
Swift 2 数组过滤解决方案
针对你的需求,我们可以通过拆分字段+标记过滤的方式来实现,下面是具体的代码和思路解析:
实现思路
- 拆分元素字段:把每个字符串按
*分割成日期、类型、名称三个部分,方便后续判断逻辑; - 标记需要排除的组合:先收集所有
type2元素对应的「日期+名称」组合,这些组合对应的type3元素就是我们要删除的目标; - 过滤数组:遍历原数组,只保留不符合「是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
相关产品推荐
相关产品推荐

