Object-C基础(12)——容器

集合(容器)

      容器用于装东西、取东西、遍历、删除东西……

NSArray和NSMutableArray

       NSArray模仿了数组,因此代表了集合元素是有顺序、有索引(可根据位置来获取)的容器。

       NSArray允许元素重复!!!  

      创建数组

          A. 用NSArray的initWithXxx:方法或arrayWithXxx:类方法。

          B. 简化语法。

      查询该容器

          - 是否包含指定对象。

          - 获取第一个、最后一个、指定位置的元素(即可用方法,也可下标)      

      对容器中查找对象

          -(NSUInteger)indexOfObject:(id)anObject:获取指定对象的索引。

          -(NSUInteger)indexOfObjectPassingTest: 代码块。 获取该数组中符合代码块条件的元素的索引。

      对集合中所有元素挨个地调用方法

          这些方法都包含了隐式的遍历(不需要程序员写循环,但实际上有循环)

          [arrmakeObjectsPerformSelector:@selector(方法)]: 让arr数组中所有元素执行指定方法。

           -(void)enumerateObjectsAtIndexes:(NSIndexSet *)indexSet

                         options:(NSEnumerationOptions)opts

                         usingBlock:(void (^)(idobj,

                                          NSUInteger idx,

                                          BOOL*stop))block  :让让arr数组中某些元素执行指定代码块。

      得到一个新数组

        - (NSArray*)arrayByAddingObject:(id)anObject:通过添加新对象来得到新数组。

        - (NSArray*)filteredArrayUsingPredicate:(NSPredicate *)predicate     :通过过滤来得到新数组。

        - (NSArray*)subarrayWithRange:(NSRange)range:    :只要中间某一段的元素,从而得到新的数组。

       排序

        - (NSArray*)sortedArrayUsingFunction:(NSInteger (*)(id,

                                               id,

                                               void *))comparator

                              context:(void*)context: 用代码块排序。

       - (NSArray*)sortedArrayUsingSelector:(SEL)comparator:根据数组元素的某个方法来排序,要求数组元素能比较大小才行。、

       - (NSArray*)sortedArrayWithOptions:(NSSortOptions)opts

                            usingComparator:(NSComparator)cmptr:     :根据代码块排序

      写入文件、读取文件

          + (NSArray*)arrayWithContentsOfFile:(NSString *)aPath   : 被读的文件必须符合NSArray要求格式的文件。

          - (BOOL)writeToFile:(NSString *)path

                        atomically:(BOOL)flag   :写入文件。

      对集合元素进行整体kvc和kvo(也是挨个地、依次地处理每个元素)

          setValue: forKey: - 该方法包含了隐式的循环,通过循环依次对每个元素都执行KVC的setter

          valueForKey: - 该方法包含了隐式的循环,通过循环依次对每个元素都执行KVC的getter

      快速枚举

          for(ele in 集合)

          {

          }

      NSMutableArray

          NSArray的特征是:不可变的。体现为:一旦NSArray创建出来,它原来包含多少个元素,以后永远都包含这些元素。

                                            元素的个数不能发生改变,也不能添加、删除、修改元素(不能替换元素,元素本身可以被修改的)。

          NSMutableArray:可变的。体现为:容器可以添加元素、删除元素、替换元素、改变元素顺序。

          替换元素时,支持使用下标方式进行替换。

NSSet和NSMutableSet

      NSSet与NSArray区别是:NSSet中元素是无序(不保证元素的添加顺序),也没有索引。因此程序不能根据索引来访问、插入、替换元素。

      基本上,只要NSArray中涉及到索引相关的方法,NSSet都不能用;反之,不涉及索引的方法,NSSet几乎都可以使用。

      因此NSSet不允许元素重复!!!

      创建Set

         只能通过初始化方法(类方法)来创建。包括创建空的Set、包含一个对象的Set、包含多个对象的Set。

      查询该容器

          - 是否包含指定对象。

          - (id)anyObject: 获取容器中某个元素,到底获取哪个元素是不确定的。但又不是随机的。

             理解这个方法:当我们把多个元素存入NSSet中,多个元素在NSSet中顺序对程序员是透明的——除非你打印该Set,否则你不知道元素的保存顺序。而anyObject方法总是返回NSSet集合的第一个元素。

      对集合中所有元素挨个地调用方法

      这些方法都包含了隐式的遍历(不需要程序员写循环,但实际上有循环)

          [arrmakeObjectsPerformSelector:@selector(方法)]: 让arr数组中所有元素执行指定方法。

           -(void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts

                       usingBlock:(void (^)(id obj,

                                           BOOL *stop))block  :让set中所有元素执行指定代码块。

      得到一个新Set

        - (NSSet*)setByAddingObject:(id)anObject:通过添加新对象来得到新Set。

        - (NSSet*)filteredSetUsingPredicate:(NSPredicate *)predicate:通过过滤来得到新数组。

      快速枚举

          for(ele in 集合)

          {

          }

      对集合元素进行整体kvc和kvo(也是挨个地、依次地处理每个元素)

          setValue: forKey: - 该方法包含了隐式的循环,通过循环依次对每个元素都执行KVC的setter方法

          valueForKey: - 该方法包含了隐式的循环,通过循环依次对每个元素都执行KVC的getter方法

      NSMutableSet

          NSSet的特征是:不可变的。体现为:一旦NSSet创建出来,它原来包含多少个元素,以后永远都包含这些元素。

                                        元素的个数不能发生改变,也不能添加、删除、修改元素(不能替换元素,元素本身可以被修改的)。

          NSMutableSet:可变的。体现为:容器可以添加元素、删除元素、替换元素。 还可以支持集合加(并)、减、交

      NSCountedSet

          NSCountedSet是NSMutableSet的子类,它能记住元素的添加次数。

          额外增加了如下方法来获取元素的添加次数:

          - (NSUInteger)countForObject:(id)anObject

          当程序去删除元素时,实际上只是将该元素的添加次数减1,只有当该元素的添加此处变为0时,该元素才会被真正删除。

      NSSet如何判断两个元素重复 (高级)

          NSSet不允许添加重复的元素的。

                 - 两个元素通过isEqual:比较要返回YES。

                 -   两个元素的hash方法返回值也相等。

                如果仅仅只满足第一条,对于NSSet可以认为两个元素是重复。换句话来说,如果两个元素仅仅只是isEqual:比较返回YES,

                ——只是程序在创建NSSet时会把两个元素当成同一个元素。

               如果你希望NSMutableSet在添加元素时,都能认为两个元素是重复的,必须满足上面2个条件。        

NSOrderedSet与NSMutableOrderedSet

           NSOrderedSet既有NArray的特性(元素有顺序,有索引),也有NSSet的特性(元素不允许重复)。

           它的方法,基本等同于NSArray。

           NSMutableOrderedSet的方法类似NSMutableArray 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值