美文网首页
数组去重

数组去重

作者: 西博尔 | 来源:发表于2016-07-12 17:45 被阅读45次

    数组去重

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

    顺序就不会乱了。

    相关文章

      网友评论

          本文标题:数组去重

          本文链接:https://www.haomeiwen.com/subject/szhsjttx.html