zoukankan      html  css  js  c++  java
  • 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]];

            }

            

        }

     

    顺序就不会乱了。

  • 相关阅读:
    [翻译] DZNSegmentedControl
    GONMarkupParser的使用
    使用@selector模仿代理功能降低代码耦合度
    编译并导入OpenSSL
    [翻译] TLTagsControl
    [控件] BookTextView
    [控件] AngleGradientView
    【转】jQuery属性过滤选择器
    【转】ajax 跨域 headers JavaScript ajax 跨域请求 +设置headers 实践
    【转】PHP----JS相互调用
  • 原文地址:https://www.cnblogs.com/Camier-myNiuer/p/4230481.html
Copyright © 2011-2022 走看看