Hanrovey Blog

编程是一门艺术,我在追寻艺术的路上...

【iOS开发】数组的去重(无序和有序)

一、 无序的去重

1.利用NSDictionary的AllKeys(AllValues)方法
可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。
代码:
    NSArray *arr =@[@11,@22,@11];
    NSMutableDictionary *dict = [NSMutableDictionarydictionary];
    for (NSNumber *numberin arr) 
    {
        [dict setObject:numberforKey:number];
    }
    NSLog(@"%@",[dictallValues]);
输出结果为:
2016-03-09 17:52:46.421 test[9555:408408] (
    22,
    11
)
2.利用NSSet的AllObjects方法
这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。
代码:
    NSArray *arr =@[@111,@222,@111];
    NSSet *set = [NSSetsetWithArray:arr];
    NSLog(@"%@",[setallObjects]);
输出结果为:
2016-03-09 17:55:13.081 test[9577:411377] (
    111,
    222
)

二、 有序的去重

很多时候可能会遇到需要去除NSArray重复的元素,用了很多方法。
最方便快捷的是NSSet.但是NSSet去重后有时候数组元素的顺序会打乱。于是换了另外一种方法如下:
代码:
    NSArray *classArray =@[@1,@2,@1,@3,@3,@1];

    NSMutableArray *categoryArray = [[NSMutableArray alloc] init];

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

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

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

        }

    }
    NSLog(@"---%@",categoryArray);
输出结果为:
2016-03-09 17:59:12.554 test[9598:414513] ---(
    1,
    2,
    3
)
顺序为有序的.
阅读更多

扫码向博主提问

去开通我的Chat快问

hanrovey

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • iOS
  • swift
  • php
  • sql
版权声明:转载请注明出处。 https://blog.csdn.net/Hanrovey/article/details/51538284
个人分类: Objective-C
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭