一.删除重复数据
利用 valueForKeyPath 的方式
NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];
NSArray *arrResult = [arrData valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"Result:\n%@", arrResult);
同样,如果数组中存储的数据为对象的形式,也可以剔除对应 key 值的重复数据后再取值
NSArray *arrData = @[@{@"name":@"zhangsan", @"age":@"20"}, @{@"name":@"lisi", @"age":@"19"}, @{@"name":@"wangwu", @"age":@"22"}, @{@"name":@"zhaoliu", @"age":@"20"}, @{@"name":@"zhangsan", @"age":@"17"}, @{@"name":@"caoqi", @"age":@"28"}, @{@"name":@"shaoba", @"age":@"24"}];
// 根据 name 字段进行去重操作(注:若需要根据其它字段则将 name 字段变更为对应的字段即可 => @distinctUnionOfObjects.XXX)
NSArray *arrResult = [arrData valueForKeyPath:@"@distinctUnionOfObjects.name"];
NSLog(@"Result:\n%@", arrResult);
二.对数组中元素去重
1.开辟新内存空间,判断是否存在,遍历数组元素,若不存在则将该元素插入至新数组中,最终得到的结果顺序不发生变化.
NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];
NSMutableArray *arrResult = [NSMutableArray array];
for (NSString *key in arrData) {
if (![arrResult containsObject:key]) {
[arrResult addObject:key];
}
}
NSLog(@"Result:\n%@", arrResult);
2.通过 NSDictionary 的 AllKeys(AllValues) 方式去重
将 NSArray 中元素插入字典中,字典设置 key value 时,若存在则更新,反之则将其插入,然后再获取AllKyes 或 AllValues 进行去重,最终得到的结果是无序的,若需要有序,则还需要进行排序操作.
NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];
NSMutableDictionary *dicResult = [NSMutableDictionary dictionary];
for (NSString *item in arrData) {
[dicResult setObject:item forKey:item];
}
NSArray *arrResult = dicResult.allValues;
NSLog(@"Result:\n%@", arrResult);// 若需要排序,则可通过快速枚举方式进行排序
三.通过 NSSet 特性
NSSet 特性:确定性、无序性、互异性
通过 NSSet 特性将数组放入集合进行自动去重,但是它与字典一样是无序的,所以最终得到的结果是无序的.
NSArray *arrData = @[@1, @2, @3, @4, @5, @1, @2, @3];
NSSet *set = [NSSet setWithArray:arrData];
NSArray *arrResult = [set allObjects];
NSLog(@"Result:\n%@", arrResult);
NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:arrData];// 有序集合
NSLog(@"Result:\n%@", orderedSet.array);
网友评论