1、利用NSDictionary的AllKeys唯一性
使用方法:将数组元素存入字典,利用字典key的唯一性获取去重之后的AllKeys,即为去重后的数据。
特点:去重后的数组是无序的
NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
for (NSString *str in array) {
[dic setObject:str forKey:str];
}
NSLog(@"%@",dic.allKeys);
2、创建新数组
使用方法:通过数组的containsObject
函数判断数据在新数组中是否存在,不存在则加入新数组,存在则放弃。
特点:去重后的数组顺序不变
NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
NSMutableArray *newArray = [NSMutableArray array];
for (NSString *str in array) {
if (![newArray containsObject:str]) {
[newArray addObject:str];
}
}
NSLog(@"%@", newArray);
3、利用NSSet存储数据的互异性
使用方法:将数据存入NSSet中,再将NSSet转为数组
特点:得到的数据是无序的
NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
NSSet *set = [NSSet setWithArray:array];
NSArray *newArray = [set allObjects];
NSLog(@"%@", newArray);
4、利用valueForKeyPath去重
使用方法:通过valueForKeyPath
中的对象操作符@distinctUnionOfObjects
实现数组去重
特点:去重后的数组是无序的
NSArray *array = @[@"a", @"a", @"a", @"b", @"c"];
NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"%@", newArray);
补充:与@distinctUnionOfObjects
对应的返回keyPath指定对象的不去重
数组。
Person *person1 = [[Person alloc] init];
person1.name = @"aab";
Person *person2 = [[Person alloc] init];
person2.name = @"aab";
Person *person3 = [[Person alloc] init];
person3.name = @"aac";
NSArray *personArray = @[person1, person2, person3];
NSArray *nameArray = [personArray valueForKeyPath:@"@unionOfObjects.name"];
NSLog(@"%@", nameArray);
//输出结果如下
(
aab,
aab,
aac
)
在写这篇小记的时候发现valueForKeyPath
还有很多有趣的用法,限于篇幅就不过多的讲解。等有空单独写一篇进行讲解。