zoukankan      html  css  js  c++  java
  • iOS NSSet 学习 “无序数组” & 去重 案例

    NSSet,NSMutableSet,NSCountedSet类声明编程接口对象的无序集合(散列存储:在内存中的存储位置不连续)。

    而NSArray,NSDictionary类声明编程接口对象的有序集合(有序存储:在内存中的存储位置连续)。”

    NSSet 运用 hash(哈希)散列算法 查找目标集合元素比NSArray快

    特点:无序性(但是可以做有序化操作),确定性,差异性(互异性) 

    举例一个简单的使用场景:

    去重:

    NSMutableArray KVO  NSMutableArray NSSet  NSOrderedSet 各种方法 比较

    结论:随着数据量增加 都比 NSMutableArray 快~

        NSArray *array = @[@1,@2,@3,@4,@4,@5,@2,@2];
        
        //NSMatableArray 去重结果: 1 2 3 4 5  有序 在 array 里面相对的顺序的"有序"
        NSMutableArray *resultArray = [NSMutableArray array];
        for (NSNumber *num  in array) {
            if (![resultArray containsObject:num]) {//判断该集合元素否存在
                [resultArray addObject:num];
            }
        }
        NSLog(@"resultArray :%@",resultArray);
        
        //KVC容器操作
        //容器不仅仅能使用KVC方法实现对容器成员传递普通的操作消息,KVC还定义了特殊的一些常用操作,使用valueForKeyPath:结合操作符来使用
        //这里使用对象操作符:
        //@distinctUnionOfObjects、@unionOfObjects
        //@distinctUnionOfObjects操作符返回被操作对象指定属性的集合并做去重操作,而@unionOfObjects则允许重复。如果其中任何涉及的对象为nil,则抛出异常。
        //去重结果  : 5 1 2 3 4 无序
        NSArray *values = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
        NSLog(@"value   : %@",values);
     
        
        //没使用 NSSet 前 其实我是会使用字典的 字典的特点 也是无序键值对 效率也是优于使用数组排重的.
        //无序结果  :3,2,5,1,4
        NSMutableDictionary *numDictionary = [NSMutableDictionary dictionary];
        for (NSNumber *num  in array) {
            [numDictionary setObject:num forKey:num];
        }
        NSLog(@"numDictionary all keys : %@",numDictionary.allKeys);
        
        
        //NSSet 去重结果  : 5 1 2 3 4  无序
        NSSet *numSet = [[NSSet alloc]initWithArray:array];
        NSLog(@"numSet Array : %@",numSet.allObjects);
        
        //NSSet 有序化操作 : 1 2 3 4 5 同上面的"有序"
        NSOrderedSet *orderNumSet = [NSOrderedSet orderedSetWithArray:array];
        NSLog(@"orderNumSet Array : %@",orderNumSet.array);
        
        //KVO 容器对象操作符 distinctUnionOfObjects
        //3,2,5,1,4  无序
        
        NSSet *setValues = [numSet valueForKeyPath:@"@distinctUnionOfObjects.self"];
        NSLog(@"setValues  : %@",setValues);

    NSSet 具体使用 :

    http://www.cnblogs.com/GISerYang/p/3340937.html

  • 相关阅读:
    201671030116宋菲菲 实验三作业互评与改进报告
    通读《构建之法》提出问题
    201671010460-朱艺璇-实验四附加实验
    201671010460朱艺璇 词频统计软件项目报告
    201671010460朱艺璇 实验三作业互评与改进报告
    阅读《现代软件工程—构建之法》提出的问题
    手把手带你了解消息中间件(3)——RocketMQ
    字符编码的历史由来
    linux常用命令
    linux各目录及重要目录的详细介绍
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/5795090.html
Copyright © 2011-2022 走看看