iOS 数组的去重(普通的无序的去重和排序好的去重)
Posted ShineYangGod
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 数组的去重(普通的无序的去重和排序好的去重)相关的知识,希望对你有一定的参考价值。
有时需要将NSArray中去除重复的元素,而存在NSArray中的元素不一定都是NSString类型。今天想了想,加上朋友的帮助,想到两种解决办法,先分述如下。 1.利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。 示例代码:NSArray *arr = @[@111,@222,@111];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSNumber *number in arr)
[dict setObject:number forKey:number];
NSLog(@"%@",[dict allValues]);
输出结果为:
2013-05-21 12:03:49.449 test1[4377:c07] (
111,
222
)
2.利用NSSet的AllObjects方法 这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。 示例代码:
NSArray *arr = @[@111,@222,@111];
NSSet *set = [NSSet setWithArray:arr];
NSLog(@"%@",[set allObjects]);
输出结果为:
2013-05-21 12:06:26.508 test1[4547:c07] (
111,
222
)
排序的去重
很多时候可能会遇到需要去除NSArray重复的元素,用了很多方法。
最方便快捷的是NSSet.但是NSSet去重后有时候数组元素的顺序会
打乱。于是换了另外一种方法如下:
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]];
顺序就不会乱了。
以上是关于iOS 数组的去重(普通的无序的去重和排序好的去重)的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 之 普通数组对象数组的去重(涉及多个场景)