1.開辟新的內存空間
判斷是否存在,若不存在則添加到數組中,得到最終結果的順序不發生變化
NSArray *originalArr = @[@1, @2, @3, @1, @3];
NSMutableArray *resultArrM = [NSMutableArray array];
for (NSString *item in originalArr) {
if (![resultArrM containsObject:item]) {
[resultArrM addObject:item];
}
}
NSLog(@"result : %@", resultArrM);
2.利用NSDictionary的AllKeys(AllValues)方法
可以將NSArray中的元素存入一個字典,然后利用AllKeys或者AllValues取得字典的所有鍵或值,這些鍵或值都是去重的
NSArray *originalArr = @[@1, @2, @3, @1, @3];
NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
for (NSNumber *n in originalArr) {
[dict setObject:n forKey:n];
}
NSLog(@"%@",[dictM allValues]);
注:結果為無序的, 也就是說不包吃原有順序, 可自行加入排序算法
3.利用NSSet特性, 放入集合自動去重
NSSet的特性: 確定性、無序性、互異性
這種方法更快,利用NSSet不會添加重復元素的特性。不過去重的數組沒有進行排序,如果需要排序,可以使用NSSortDescriptor類。
NSArray *originalArr = @[@1, @2, @3, @1, @3];
NSSet *set = [NSSet setWithArray:originalArr];
NSLog(@"result: %@", [set allObjects]);
4.通過valueForKeyPath, 去重只需一行代碼
NSArray *originalArr = @[@1, @2, @3, @1, @3];
NSArray *result = [originalArr valueForKeyPath:@"@distinctUnionOfObjects.self"];