iOS 开发入门基础(02)-- iOS 当中的集合类型

今天继续昨天的内容,上一篇讲述了OC当中的基本数据类型,这次要讲的是OC当中的集合数据类型, NSArray(数组) NSDictionary(字典) NSSet(集合)这三种集合数据类型.

一.NSArray 和 NSMutableArray

1).NSArray

NSArray是一个集合数据类型,存储的对象必须为OC当中的对象类型(单数组中的数据类型不不一定要是单一对象类型,可以为多种类型并存),保存的对象类型为有序数据,可以按照数组当中的下标来对应取出数据.

1.初始化方法(五种最常用的初始化方法)

    NSArray *array0 = [[NSArray alloc] initWithObjects:@"11",@"dd",@(22), nil];

    NSArray *array1 = [[NSArray alloc] initWithArray:array0];

    NSArray *array2 = [NSArray arrayWithObjects:@"11",@"dd",@(22), nil];

    NSArray *array3 = [NSArray arrayWithArray:array2];

    NSArray *array4 = @[@"11",@"dd",@(22)]; //此种写法为语法糖的写法,其概念完全等价于上面的几种方法,只是写法简洁了一点,新手不推荐使用.还需要记住一点的是@[]这种写法创建的数组只可以是不可变数组(NSArray)

2.常用操作

  NSArray *array = [[NSArray alloc] initWithObjects:@"11",@"dd",@22, nil];

    //获取指定下标下的数组元素

    NSLog(@"%@",array[0]);

    NSLog(@"%@",[array objectAtIndex:0]);

    //获取数组中包含多少元素

    [array count];

    //获取数组中的所有元素

    for(NSInteger i =0; i < array.count; i ++) {

        NSLog(@"%@",array[i]);

    }

    //判断当前数组是否包含某元素

    [array containsObject:@"11"];

    //获取元素在当前数组中的下标

    NSUInteger index =  [array indexOfObject:@"11"];

    //快速遍历数组(需要注意的是快速遍历并不是按照一定顺序来进行的,而是快速的取出当前数组中所有的元素并展示的.)

    for(id object in array) {

        NSLog(@"%@",object);

    }

    [array firstObject];//获取第一个元素

    [array lastObject];//获取最后一个元素

2).NSMutableArray

1.初始化方法(六种最常用的方法)

    //以下四种方式对照NSArray去理解

    NSMutableArray *mArray0 = [[NSMutableArray alloc] initWithObjects:@"11",@"dd",@(22), nil];

    NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithArray:(NSArray *)mArray0];      //(NSArray *)mArray0这里是由于类型不匹配,要求的参数是不可变数组 这里强转了一下(class *)意思是强转为指定(class *)类型的对象.强转的使用在以后会单独讲解,现在只做了解.

    NSMutableArray *mArray2 = [NSMutableArray arrayWithObjects:@"11",@"dd",@(22), nil];

    NSMutableArray *mArray3 = [NSMutableArray arrayWithArray:(NSArray *)mArray2];

    //初始化可变数组并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)

    NSMutableArray *mArray4 = [NSMutableArray arrayWithCapacity:10];

    //同样为初始化可变数组但是不指定初始内存空间大小

    NSMutableArray *mArray5 = [NSMutableArray array];

2.常用操作

    NSMutableArray *mArray = [[NSMutableArray alloc] initWithObjects:@"11",@"dd",@(22), nil];

    //添加元素

    [mArray addObject:@"cc"];

    //在指定位置添加元素

    [mArray insertObject:@"ss" atIndex:0];

    //删除元素

    [mArray removeObject:@"cc"];

    //删除指定位置的元素

    [mArray removeObjectAtIndex:0];

    //删除所有元素

    [mArray removeAllObjects];

    //删除最后一个元素

    [mArray removeLastObject];

    //修改数组某一元素的内容(两种方式一种是根据下标直接替换当前数组中的元素,另一种是直接按照下标取出元素并修改)

    [mArray replaceObjectAtIndex:0 withObject:@"yy"];//f根据下标直接替换元素

    mArray[0] =@"tt";//按照下标取出元素并修改

PS:可变数组和不可变数组的遍历方式都是相同的所以不过的介绍了.

二.NSDictionary 和 NSMutableDictionary

字典是OC当中最常用的集合对象类型,字典顾名思义的意思就是和日常中使用的字典是一个意思,字典集合当中存储的对象都是以键值对的形式存在的,所谓的键值对当中的键值得就是索引,值就是键对应的储存的数据.字典在正常的使用中就是以键来获取对应的值,要注意的是字典中的键是唯一的.不可能出现同样的两个键.

值得注意的地方是字典中的储存的数据对象都是无须的所以无法通过下标来取值,字典取值是通过键也就是索引来获取对应的数据.

1).NSDictionary

1.初始化方法

    NSDictionary *dic0 = [[NSDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];

    NSDictionary *dic1 = [[NSDictionary alloc] initWithDictionary:dic0];

    NSArray*keyArray =@[@"key0",@"key1"];

    NSArray*valueArray =@[@"value0",@"value1"];

    NSDictionary *dic2 = [[NSDictionary alloc] initWithObjects:valueArray forKeys:keyArray];

    NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];

    NSDictionary *dic4 = [NSDictionary dictionaryWithDictionary:dic3];

    NSDictionary *dic5 = [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray];

    //字典的语法糖写法 需要注意的是字典的语法糖写法是@{}这里是大括号 大括号中是以@"":@""为一个对象元素 对象之间是使用逗号分隔.语法糖初始化字典时一定要记住@"键":@"值",和上方的初始化是相反的.

    NSDictionary *dic6 = @{@"key0":@"value0",@"key1":@"value1"};

2.常用操作

    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"vallue1",@"key1", nil];

    //获取字典元素个数

    [diccount];

    //获取字典中的元素

    [dicobjectForKey:@"key0"];

    //遍历字典

    for(NSString*keyindic) {

        NSLog(@"%@",[dicobjectForKey:key]);

    }

    //获取字典的所有键

    [dicallKeys];

    //获取字典的所有值

    [dicallValues];

2).NSMutableDictionary

1.初始化方法

    NSMutableDictionary *mDic0 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];

    NSMutableDictionary *mDic1 = [[NSMutableDictionary alloc] initWithDictionary:(NSDictionary *)mDic0];   //(NSDictionary *)mDic0这里是由于类型不匹配,要求的参数是不可变数组 这里强转了一下(class *)意思是强转为指定(class *)类型的对象.强转的使用在以后会单独讲解,现在只做了解.

    NSMutableDictionary *mDic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];

    NSMutableDictionary *mDic3 = [NSMutableDictionary dictionaryWithDictionary:(NSDictionary *)mDic2];

    //初始化可变字典并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)

    NSMutableDictionary *mDic4 = [NSMutableDictionary dictionaryWithCapacity:10];

    //同样为初始化可变字典但是不指定初始内存空间大小

    NSMutableDictionary *mDic5 = [NSMutableDictionary dictionary];

2.常用操作

    NSMutableDictionary *mDic0 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1", nil];

    //添加元素

    /*

     需要注意的是这两种方法都是为字典中添加键值对的方法

     setObject 中value的对象不能为空否则会报错,但是setValue中 value是可以为空的

     还有需要注意的一点是[NSNull null]这个代表的是创建了一个空的对象并不等价于nil

     当使用setValue时如果value为nil时会默认调用removeObjectForKey这个方法,所以当setValue的值为nil时并不会添加对象到字典中.

     setValue中值应该为字符串类型

     setObject中添加的值为任意对象类型.

     forkKey中值必须为字符串类型.

     */

    [mDic0setObject:@"value2" forKey:@"key2"];

    [mDic0setValue:@"value3" forKey:@"key3"];

    //删除元素

    [mDic0removeObjectForKey:@"key1"];

    //修改字典中的元素

    [mDic0setValue:@"value4" forKey:@"key0"];  //其实修改和添加调用的方法是一致的,不同点在于key如果key是字典中已经包含的元素就是修改,入不包含则为添加元素

    //获取字典中的元素

    [mDic0objectForKey:@"key0"];

    //删除所有元素

    [mDic0removeAllObjects];

三.NSSet和NSMutableSet

集合是OC当中的一个集合数据类型,其区别于Array不同点在于Array是有序存储的,而NSSet是无序的(所以NSSet是无法通过下标取值的),而且Array是不排重复元素的而NSSet是排重存储的.

1).NSSet

1.初始化方法

    NSSet *set0 = [[NSSet alloc] initWithObjects:@"111",@"111",@"222",@"222", nil];

    NSSet *set1 = [[NSSet alloc] initWithSet:set0];

    NSSet *set2 = [NSSet setWithObjects:@"111",@"111",@"222",@"222", nil];

    NSSet*set3 = [NSSetsetWithSet:set2];

    NSArray *array = @[@"111",@"111",@"222",@"222"];

    NSSet *set4 = [[NSSet alloc] initWithArray:array];

    NSSet*set5 = [NSSetsetWithArray:array];

    //需要注意的是初始化时为set赋的值为@"111",@"111",@"222",@"222",由于set是排重存储的所以set的最终储存结果为@"111",@"222",

2.常用操作

    NSSet *set0 = [[NSSet alloc] initWithObjects:@"111",@"222", nil];

    //取出set中的元素(由于set是无序存储所以无法指定某一元素进行提取)

    [set0anyObject];//随机打印set中的元素

    //遍历set

    for(idobjectinset0) {

        NSLog(@"%@",object);

    }

2).NSMutableSet

1.初始化方法

    NSMutableSet *set0 = [[NSMutableSet alloc] initWithObjects:@"111",@"222", nil];

    NSMutableSet *set1 = [[NSMutableSet alloc] initWithSet:set0];

    NSMutableSet *set2 = [NSMutableSet setWithObjects:@"111",@"222", nil];

    NSMutableSet *set3 = [NSMutableSet setWithSet:set2];

    NSArray*array =@[@"111",@"222"];

    NSMutableSet *set4 = [[NSMutableSet alloc] initWithArray:array];

    NSMutableSet *set5 = [NSMutableSet setWithArray:array];

    //初始化可变集合并申请10个内存地址大小的内存空间(注意这里的10个内存大小并不是一成不变的,当你没用完时此对象指向的内存地址空间大小为10 当储存内容超过10以后系统会自动分配新的内存空间以供使用)

    NSMutableSet *set6 = [NSMutableSet setWithCapacity:10];

    //同样为初始化可变集合但是不指定初始内存空间大小

    NSMutableSet *set7 = [NSMutableSet set];

2.常用操作

    NSMutableSet *set0 = [[NSMutableSet alloc] initWithObjects:@"111",@"222", nil];

    //添加元素

    [set0addObject:@"333"];

    NSArray*array =@[@"444",@"555"];

    [set0addObjectsFromArray:array];

    //删除元素

    [set0removeObject:@"222"];

    //删除所有元素

    [set0removeAllObjects];

本次OC当中的集合类型就算介绍完了,这里列出的是最为常用的一些初始化方法和使用方法,其内部还有很多的方法可以使用,具体的等有需求的时候再单独介绍.下一篇文章要介绍的是iOS开发的基础视图控件UIView.

喜欢的点个赞再走哈.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容