iOS数组去重高效实现方法
更新时间:2025-04-14 分类:网络技术 浏览量:1
你的iOS数组里还塞满"双胞胎"数据吗?
刚接触iOS开发的新手们,是不是经常遇到这种情况:从网络请求回来的用户列表有重复账号?购物车里的商品条目莫名其妙出现两份?别慌!今天我们就来彻底解决这个让无数开发者抓狂的数组去重问题。
为什么数组会变成"复制工厂"?
先理解问题根源才能对症下药:
1. 网络请求重复提交导致服务端返回相同数据
2. 用户快速点击造成的重复添加操作
3. 多线程环境下数据同步不及时
4. 本地缓存机制设计缺陷
新手必学的三大去重绝招
准备好你的Xcode,我们直接上硬菜:
招式一:NSSet暴力去重法
这是最快捷的解决方案,适合基础数据类型:
// Objective-C版本
NSArray *originArray = @[@1, @2, @2, @3];
NSSet *uniqueSet = [NSSet setWithArray:originArray];
NSArray *resultArray = [uniqueSet allObjects];
// Swift版本
let originArray = [1, 2, 2, 3]
let uniqueArray = Array(Set(originArray))
⚠️ 注意:这种方法会丢失原始顺序,适合不关心排列顺序的场景
招式二:枚举筛选法
保留原始顺序的经典做法:
NSMutableArray *uniqueArray = [NSMutableArray array];
for (id obj in originArray) {
if (![uniqueArray containsObject:obj]) {
[uniqueArray addObject:obj];
}
}
✅ 优点:代码逻辑清晰易懂
❌ 缺点:时间复杂度O(n²),数据量大时性能堪忧
招式三:高阶排序法
结合排序的去重妙招:
NSArray *sortedArray = [originArray sortedArrayUsingSelector:@selector(compare:)];
NSMutableArray *uniqueArray = [NSMutableArray array];
id previousObject = nil;
for (id currentObject in sortedArray) {
if (![currentObject isEqual:previousObject]) {
[uniqueArray addObject:currentObject];
previousObject = currentObject;
}
}
对象数组去重黑科技
当数组元素是自定义对象时,需要特殊处理:
// 假设User对象有userId属性
NSArray *users = /*...*/;
NSMutableDictionary *tempDict = [NSMutableDictionary dictionary];
for (User *user in users) {
tempDict[user.userId] = user;
}
NSArray *uniqueUsers = [tempDict allValues];
性能优化小贴士
1. 万级数据量推荐使用NSOrderedSet
2. 需要保持顺序时优先考虑字典法
3. 频繁操作建议封装成NSArray分类
4. Swift项目可以活用filter+contains组合
还在为重复数据烦恼?赶紧把这些代码片段收藏到你的代码工具箱吧!实际开发中根据业务需求灵活选择,你会发现处理数组就像整理衣柜一样得心应手。