• iOS学习15之OC集合


    1、数组类

     1> 回顾C语言数组

      数组是一个有序的集合, 来存储相同数据类型的元素。

      通过下标访问数组中的元素,下标从 0 开始。

     2> 数组

      数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制

      通过下标访问数组元素,下标从 0 开始。

      NSArray:不可变数组,即:对象创建好以后,数组中元素个数不能发生变化

      NSMutableArray:可变数组,即对象创建好以后,数组中的元素可以灵活进行增删改操作

     3> NSArray创建

      ① 初始化方法

      NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];

      注: nil 作为数组存放元素的结束标志,多个元素通过逗号间隔。

      ② 便利构造器

      NSArray *names = [NSArray arrayWithObjects:@"frank", @"duck", @"monkey", nil];

      ③ 字面量

      使 " @[] " , " [] "中存入对应的对象,对象之间使 "," 相隔。比如:
            NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"];

     4> NSArray常用的方法

     6         /**
     7          *  2.数组查找
     8          */
     9         // 通过下标访问对象
    10         NSLog(@"%@", a2[1]);
    11         
    12         NSLog(@"%@", [a1 objectAtIndex:2]);
    13         
    14         // 通过对象访问下标
    15         NSLog(@"afu在%lu位置", [a1 indexOfObject:@"afu"]);
    16         
    17         /**
    18          *  3.判断数组中是否包含某个指定的对象
    19          */
    20         BOOL isHave = [a3 containsObject:@"zhatian"];
    21         NSLog(@"isHave = %d", isHave);
    22         
    23         /**
    24          *  4.NSString和NSArray之间的转换
    25          */
    26         // 将一个字符串按照指定的字符截取,每段内容存放在数组中
    27         NSString *string1 = @"孙超&孟玲旭&程涵";
    28         NSArray *strArray = [string1 componentsSeparatedByString:@"&"];
    29         NSLog(@"count = %lu", strArray.count); // a5.count用于得到数组的长度
    30         for (int i = 0; i < strArray.count; i++) {
    31             NSLog(@"strArray[%d] = %@", i, strArray[i]);
    32         }
    33     
    34         // 将数组中的元素按照指定的字符拼接成新的字符串对象
    35         NSArray *a5 = @[@"雷坤", @"于艳平", @"尹浩"];
    36         NSString *string2 = [a5 componentsJoinedByString:@"&"];
    37         NSLog(@"string2 = %@", string2);

    5> NSMutableArray创建

     NSMutableArray 继承于 NSArray,也就是说 NSArray所有创建方法 NSMutableArray 都可以使用,NSMutableArray 特有创建的方法如下:

     ① 初始化方法

      NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:0];

     ② 便利构造器

      NSMutableArray *names = [NSMutableArray arrayWithCapacity:0];

     ③ 字面量

      NSMutableArray *names = [@[@"frank", @"duck", @"monkey", @"cow"] mutableCopy];

    6> NSMutableArray常用方法

     1         // 1.创建对象
     2         NSMutableArray *ma1 = [[NSMutableArray alloc] initWithObjects:@10, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil];
     3         
     4         NSMutableArray *ma2 = [NSMutableArray arrayWithObjects:@"quguowei", @"xiaonan", @"zhouyuqi", @"bobo", @"xiaozun", nil];
     5         
     6         NSMutableArray *ma3 = [@[@"yangyingda", @"yangshukai", @"yida", @"zhatian", @"wumingwei"] mutableCopy];
     7         
     8         NSMutableArray *ma4 = [[NSMutableArray alloc] initWithCapacity:4];
     9         
    10         NSMutableArray *ma5 = [NSMutableArray arrayWithCapacity:4];
    11         
    12         // 2.添加元素
    13         [ma1 addObject:@"zf"];
    14         NSLog(@"ma1 = %@", ma1);
    15         
    16         // 插入元素
    17         [ma2 insertObject:@"zf" atIndex:0];
    18         NSLog(@"ma2 = %@", ma2);
    19         
    20         // 3.删除元素
    21         // 删除指定对象
    22         [ma3 removeObject:@"zhatian"];
    23         NSLog(@"ma2 = %@", ma2);
    24         
    25         // 删除最后一个对象
    26         [ma3 removeLastObject];
    27         NSLog(@"ma2 = %@", ma2);
    28         
    29         // 删除指定下标的对象
    30         [ma2 removeObjectAtIndex:2];
    31         NSLog(@"ma2 = %@", ma2);
    32         
    33         // 删除所有的对象
    34         [ma2 removeAllObjects];
    35         NSLog(@"ma2 = %@", ma2);
    36         
    37         // 4.替换指定位置的对象
    38         NSMutableArray *ma6 = [[NSMutableArray alloc] initWithObjects:@10, @"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", nil];
    39 
    40         // 替换指定位置的对象
    41         [ma6 replaceObjectAtIndex:0 withObject:@"zf"];
    42         NSLog(@"ma6 = %@", ma6);
    43         
    44         // 5.交换指定位置的对象
    45         [ma6 exchangeObjectAtIndex:3 withObjectAtIndex:4];
    46         NSLog(@"ma6 = %@", ma6);
    47         
    48         [ma6 setObject:@"jing" atIndexedSubscript:0];
    49         NSLog(@"ma6 = %@", ma6);

    2、字典类

     1> 字典的概述

      字典是一个无序的集合, 来存储具有一一对应关系的数据。

      字典中存储的每一个对象都是一对键值对,键值对包含两个部分keyvalue,keyvalue的值都是对象类型。         

      对于每一对key-value称为一个 (Entry)。

      字典中的key值是唯一的

     2> 字典的特点

      与数组不同,字典靠key存取元素。

      keyvalue必须都是对象类型

      字典中键值对的存储是无序的。

      字典分为两种类型不可变字典(NSDictionary),可变字典 (NSMutableDictionary)。

     3> NSDictionary 创建方法和常用的方法

     1         /**
     2          *  1.创建对象
     3          */
     4         // 初始化方法
     5         NSDictionary *dict1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan", @"name", @"boy", @"sex", @18, @"age", nil];
     6         NSLog(@"dict1 = %@", dict1);
     7         
     8         NSDictionary *dict2 = [[NSDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]];
     9         NSLog(@"dict2 = %@", dict2);
    10         
    11         // 类方法
    12         NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil];
    13         NSLog(@"dict3 = %@", dict3);
    14         
    15         NSDictionary *dict4 = [NSDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]];
    16         NSLog(@"dict4 = %@", dict4);
    17         
    18         // 字面量
    19         NSDictionary *dict5 = @{
    20                                 @"name" : @"gaojie",
    21                                 @"sex"  : @"boy",
    22                                 @"age"  : @28,
    23                                 @"hobby": @"nana"
    24                                 };
    25         NSLog(@"dict5 = %@", dict5);
    26         
    27         /**
    28          *  2.查找
    29          */
    30         
    31         // 根据key查找object
    32         NSString *string1 = [dict5 objectForKey:@"name"];
    33         NSLog(@"string1 = %@", string1);
    34         
    35         // 下标法 下标为key值
    36         NSLog(@"%@", dict5[@"name"]);
    37         
    38         /**
    39          *  3.获取字典的长度
    40          */
    41         NSLog(@"count = %lu", dict5.count);

     3> NSMutableDictionary 创建方法和常用的方法

     1         // 1.创建对象
     2         // 初始化方法
     3         NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil];
     4         NSLog(@"mdict1 = %@", mdict1);
     5         
     6         NSMutableDictionary *mdict2 = [[NSMutableDictionary alloc] initWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]];
     7         NSLog(@"mdict2 = %@", mdict2);
     8 
     9         // 类方法
    10         NSMutableDictionary *mdict3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"liuaoran", @"name", @88, @"age", @"nan", @"sex", nil];
    11         NSLog(@"mdict3 = %@", mdict3);
    12         
    13         NSMutableDictionary * mdict4 = [NSMutableDictionary dictionaryWithObjects:@[@"zhangsan", @"boy", @18] forKeys:@[@"name", @"sex", @"age"]];
    14         NSLog(@"mdict4 = %@", mdict4);
    15         
    16         // 2.添加、修改键值对
    17         
    18         // 方法位于NSMutableDictionary类中
    19         [mdict1 setObject:@"lisi" forKey:@"name1"]; // 当key存在时,只会讲value修改,若不存在,则会增加一个新的键值对
    20         NSLog(@"mdict1 = %@", mdict1);
    21         
    22         // 方法位于NSObject类中
    23         [mdict2 setValue:@"qinghedasha" forKey:@"address"];
    24         NSLog(@"mdict2 = %@", mdict2);
    25         
    26         /*
    27          setVlaue: forKey: 的key参数类型必须是NSString * ,是OBject对象的方法,也就是说所有的OC对象都有这个方法。
    28          setObject: forKey: 的key参数类型可以使任意类型的对象,是NSMutableDictionary类中特有的方法。
    29          */
    30         
    31         [mdict2 addEntriesFromDictionary:@{@"name1" : @"lishi"}];
    32         NSLog(@"mdict2 = %@", mdict2);
    33         
    34         // 3.删除
    35         // 通过key进行删除
    36         [mdict1 removeObjectForKey:@"name1"];
    37         NSLog(@"mdict1 = %@", mdict1);
    38         
    39         // 删除所有内容
    40         [mdict1 removeAllObjects];
    41         NSLog(@"mdict1 = %@", mdict1);

    3、集合类

     1> 集合的描述

      集合OC 中另一个容器,开发过程中使用的范围并没有数组字典频繁。OC中的集合分为不可变集合(NSSet)和可变集合(NSMutableSet)两种。

     2> 集合的特点

      ① 互异性 集合中不能够存在两个相同的对象。

      ② 无序性 集合中的对象没有顺序,先添加的对象不一定在第一个位置,后添加的也不一定在最后的位置。

     集合经常用来处理重用问题

     3> NSSet的创建

    1 // 初始化方法
    2 NSSet *set1 = [[NSSet alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];
    3         
    4 // 类方法
    5 NSSet *set2 = [NSSet setWithObjects:@"nana", @"huaiyu", @"xiaoqiang", @"jingming", @"afu", @"afu", nil];

     注意:不可变集合一旦创建,集合中的对象无法修改只能从集合中读取对象,并且没有快速创建集合对象的字面量

     4> NSSet的常用操作

    1         // 任意取一个元素
    2         NSString *str = [set anyObject];
    3         // 取出所有元素
    4         NSArray *array = [set allObjects];
    5         NSLog(@"%@", array);
    6         // 获取集合中元素个数
    7         NSLog(@"%lu", set.count);
    8         // 判断对象是否在集合中
    9         NSLog(@"%d", [set containsObject:@"nana"]);

      5> NSMutableSet概述

      NSMutableSet(可变集合)的父类是NSSet,具有NSSet所有的方法,同时在其基础上又添加了"添加"和"删除"对象的操作。

     6> NSMutableSet常用操作

    1         // 添加对象
    2         [mset addObject:@"-1"];
    3         // 删除一个对象
    4         [mset removeObject:@"-1"];
    5         // 删除所有对象
    6         [mset removeAllObjects];
  • 相关阅读:
    【bzoj2724】[Violet 6]蒲公英 分块+STL-vector
    【bzoj4026】dC Loves Number Theory 可持久化线段树
    【bzoj3744】Gty的妹子序列 分块+树状数组+主席树
    【bzoj3166】[Heoi2013]Alo 可持久化Trie树+STL-set
    【bzoj3060】[Poi2012]Tour de Byteotia 并查集
    【bzoj3510】首都 LCT维护子树信息(+启发式合并)
    【bzoj4530】[Bjoi2014]大融合 LCT维护子树信息
    【bzoj3261】最大异或和 可持久化Trie树
    【bzoj2081】[Poi2010]Beads Hash
    【bzoj4260】Codechef REBXOR Trie树
  • 原文地址:https://www.cnblogs.com/gfxxbk/p/5316324.html
Copyright © 2020-2023  润新知