1.今天介绍一个数组去重的小方法,超级简单。
原理依据KVC Collection Operators中的对象操作符
对象操作符:@distinctUnionOfObjects/@unionOfObjects
返回一个由操作符右边的 key path 所指定的对象属性组成的数组。
其中@distinctUnionOfObjects 会对数组去重, 而且 @unionOfObjects 不会。
如何嫌浪费时间,只看下面一段代码即可。
NSArray* array = @[@"a",@"b",@"c",@"d",@"c",@"d",@"a"];
NSArray* aArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"%@",aArray);//a,b,c,d
扩展:数组操作符 和 简单集合操作符
数组操作符:@distinctUnionOfArrays / @unionOfArrays:返回了一个数组,其中包含这个集合中每个数组对于这个 操作符右面指定的 key path 进行操作之后的值。distinctUnionOfArrays会移除重复的值。
例如:
NSArray* array1 = @[@"a",@"b",@"c",@"d",@"c",@"d",@"a"];
NSArray* array2 = @[@"r",@"b",@"c",@"d",@"9",@"d",@"0"];
NSArray* aArray = [@[array1,array2] valueForKeyPath:@"@distinctUnionOfArrays.self"]; //a,b,r,c,d,0,9
@min: 和@max一样,但是返回的是集合中的最小值
@avg: 把集合中的每个对象都转换为double类型,返回一个值为平均值的NSNumber对象
@sum: 首先把集合中的每个对象都转换为double类型,然后计算其总,最后返回一个值为这个总和的NSNumber对象
例如:
@interface Person : NSObject
@property NSString *name;
@property NSInteger age;
@property NSDate *birthday;
@end
Name Age Birthday
xiaohong 13 September 21, 2007
xiaoli 20 November 3, 2000
xiaoming 23 June 11, 1997
NSArray<Person*>*peoples 数组里装的是person对象
[peoples valueForKeyPath:@"@max.age"]; // 23 最大年龄
[peoples valueForKeyPath:@"@avg.age"]; // 平均年龄
[peoples valueForKeyPath:@"@min.birthday"]; // 最小生日June 11, 1997
2.还有一种简单粗暴的for循环去重
-(NSMutableArray*)removeDunlicates:(NSMutableArray*)projectList{
NSMutableArray* resultList = [[NSMutableArray alloc] init];
for (NSInteger i=0; i<projectList.count; i++) {
NSDictionary* iItem = projectList[i];
BOOL flag = YES;
for (NSInteger j=0; j<resultList.count; j++) {
NSDictionary* jItem = resultList[j];
if ([iItem[@"project_id"] isEqual:jItem[@"project_id"]]&&
[iItem[@"inner_net_ip"] isEqual:jItem[@"inner_net_ip"]]) {
flag = NO;
break;
}
}
if (flag) {
[resultList addObject:iItem];
}
}
return resultList;
}
网友评论