iOS 数组的去重(普通的无序的去重和排序好的去重)

本文转载至 http://blog.csdn.net/zhaopenghhhhhh/article/details/24972645

 

有时需要将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 allocinit];

    for (unsigned i = 0; i < [nameArray count]; i++){

        if ([categoryArray containsObject:[nameArray objectAtIndex:i]] == NO){

            [categoryArray addObject:[nameArray objectAtIndex:i]];

        }

        

    }

 

顺序就不会乱了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。