項(xiàng)目中由于某些需求有時(shí)需要將NSArray中去除重復(fù)的元素,而存在NSArray中的元素不一定都是NSString類型沪伙。
1.利用NSDictionary的AllKeys(AllValues)方法
可以將NSArray中的元素存入一個(gè)字典瓮顽,然后利用AllKeys或者AllValues取得字典的所有鍵或值,這些鍵或值都是去重的焰坪。
示例代碼:
NSArray *arr = @[@111,@222,@111];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSNumber *number in arr) {
[dict setObject:number forKey:number];
}
NSLog(@"%@",[dict allValues]);
輸出結(jié)果為:
2013-05-21 12:03:49.449 test1[4377:c07] (
111,
222
)
2.利用NSSet的AllObjects方法
這種方法更快趣倾,利用NSSet不會(huì)添加重復(fù)元素的特性聘惦。不過(guò)去重的數(shù)組沒(méi)有進(jìn)行排序某饰,如果需要排序,可以使用NSSortDescriptor類善绎。
示例代碼:
NSArray *arr = @[@111,@222,@111];
NSSet *set = [NSSet setWithArray:arr];
NSLog(@"%@",[set allObjects]);
輸出結(jié)果為:
2013-05-21 12:06:26.508 test1[4547:c07] (
111,
222
)
排序的去重
很多時(shí)候可能會(huì)遇到需要去除NSArray重復(fù)的元素黔漂,用了很多方法。
最方便快捷的是NSSet.但是NSSet去重后有時(shí)候數(shù)組元素的順序會(huì)
打亂禀酱。于是換了另外一種方法如下:
NSMutableArray *categoryArray = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < [nameArray count]; i++){
if ([categoryArray containsObject:[nameArray objectAtIndex:i]] == NO){
[categoryArray addObject:[nameArray objectAtIndex:i]];
}
}
順序就不會(huì)亂了炬守。