NSArray *array = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
NSMutableArray *resultArray = [[NSMutableArray alloc] initWithCapacity:array.count]; // 外层一个循环 for (NSString *item in array) { // 调用-containsObject:本质也是要循环去判断,所以本质上是双层遍历 // 时间复杂度为O ( n^2 )而不是O (n) if (![resultArray containsObject:item]) { [resultArray addObject:item]; } } NSLog(@"resultArray: %@", resultArray); //补充:原来集合操做能够经过valueForKeyPath来实现的,去重能够一行代码实现: array = [array valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"%@", array);
可是返回的结果是无序的,与原来的顺序不一样。你们能够阅读:Collection Operators算法
NSMutableDictionary *resultDict = [[NSMutableDictionary alloc] initWithCapacity:array.count]; for (NSString *item in array) { [resultDict setObject:item forKey:item]; } NSArray *resultArray = resultDict.allValues; NSLog(@"%@", resultArray); //须要结果有序的话 就用快速枚举排序
NSSet *set = [NSSet setWithArray:array]; NSArray *resultArray = [set allObjects]; NSLog(@"%@", resultArray); //使用过有序集合 NSOrderedSet *set = [NSOrderedSet orderedSetWithArray:array]; NSLog(@"%@", set.array);