O-C04(数组、字典、集合)

一、数组类

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

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

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

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

1、NSArray创建:

初始化方法:NSArray *names = [[NSArray alloc] initWithObjects:@"frank",@"duck",@"monkey",nil];

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

便利构造器:NSArray *names1 = [NSArray arrayWithObjects:@"frank",@"duck",@"monkey",nil];

字面量:使用“@[]”、“[]”中存入对应的对象,对象之间使用“,”间隔。比如:NSArray *names2 =@[@"frank",@"duck",@"monkey"];

2、NSArray常用方法:

元素个数:@property(readonly)NSUInteger count;      例如:NSLog(@"%ld",names2.count);

获取数组中指定下标对应的元素:- (id)objectAtIndex:(NSUInteger)index;  例如:NSLog(@"%@",[names2 objectAtIndex:0]); 

字面量方式获取数组元素:字面量方式获取:数组对象[元素下标]: NSLog(@"%@",names2[0]);

用来判断数组中是否包含某一个给定的对象:- (BOOL)containsObject:(id)anObject;  例如:if([names2 containsObject:@"duck"]) {

NSLog(@"包含");

}else{

NSLog(@"不包含");

}

获取数组元素对应的索引:- (NSUInteger)indexOfObject:(id)anObject;  例如:NSLog(@"%ld",[names2 indexOfObject:@"duck"]);

3、NSString转换为NSArray:

按照给定的字符串进行截取,将截取的多段字符串放入数组中:- (NSArray*)componentsSeparatedByString:(NSString*)separator;  例如:有一个字符串,通过.进行分割:NSString *separator =@"www.lanou3g.com";

NSArray *array = [separator componentsSeparatedByString:@"."];

NSLog(@"%@",array);

4、NSArray转换为NSString:

将数组中的元素按照给定的字符串格式拼接成一个完整的字符串对象:- (NSString*)componentsJoinedByString:(NSString*)separator; 例:有一个数组,通过&将所有元素拼接成一个字符串:NSArray *array1 =@[@"北京",@"大连",@"河南",@"上海",@"广州"];

NSString *separator1 = [array1 componentsJoinedByString:@"&"];

NSLog(@"%@",separator1);     (不想加符号(&)直接删除符号就可以)

5、NSMutableArray概述:

NSmutableArray是OC中的可变数组,NSMutableArray的父类是NSArray,具有NSArray所有方法,同时在NSArray的基础上添加了对自身对象增删改的操作。

NSMutableArray创建:

初始化方法:NSMutableArray *names4 = [[NSMutableArray alloc] initWithObjects:@"frank",@"duck",@"monkey",@"cow",nil];  (建议使用)

//NSMutableArray *names4 = [[NSMutableArray alloc] initWithCapacity:0];  (不建议使用)

便利构造器:NSMutableArray *names3 = [NSMutableArray arrayWithObjects:@"frank",@"duck",@"monkey",@"cow",nil];  (建议使用)

第二种方法://由一个已知的数组创建另一个数组

NSMutableArray *nam = [NSMutableArray arrayWithArray: names3];

//NSMutableArray *names3 = [NSMutableArray arrayWithCapacity:0];  (不建议使用)

字面量:(创建方式:不可变数组拷贝一份可变的副本)NSMutableArray *names5 = [@[@"frank",@"duck",@"monkey",@"cow"] mutableCopy];

6、NSMutableArray常用操作:

数组中添加一个对象:(在数组的末尾处添加)     - (void)addObject:(id)object;  例如: [names5 addObject:@"dog"];

NSLog(@"%@",names5);

数组中指定位置插入一个对象:- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;  例如:[names5 insertObject:@"cat" atIndex:3];    NSLog(@"%@",names5);

数组中移除一个对象:(根据内存地址判定移除对象,如果对象有重复的,则如果移除后面的对象,则移除失败)        - (void)removeObject:(id)object;  例如:[names5 removeObject:@"cat"];    NSLog(@"%@",names5);

移除数组中最后一个对象:- (void)removeLastObject;  例如:[names5 removeLastObject];  NSLog(@"%@",names5);

移除数组中所有的元素:- (void)removeAllObjects;  例如:[names5 removeAllObjects];    NSLog(@"%@",names5);

移除数组中指定位置的元素:- (void)removeObjectAtIndex:(NSUInteger)index;  例如:[names5 removeObjectAtIndex:3];    NSLog(@"%@",names5);

使用指定的对象替换指定位置的对象(修改某索引处的元素内容):- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;  例如://[names5 replaceObjectAtIndex:2 withObject:@"cat"];  NSLog(@"%@",names5);

names5[1] =@"aa";

NSLog(@"%@",names5);

交换指定的两个下标对应的对象(交换两个索引处的元素):- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;  例如:[names5 exchangeObjectAtIndex:0 withObjectAtIndex:2];    NSLog(@"%@",names5);

二、字典类

1、字典概述:

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

字典中存储的每一个对象都是一对键值对,键值对包含两个部分key和value,key与value的值都是对象类型。key通常都是字符串,且key是唯一的,不允许出现两个相同的key。

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

2、字典的特点:

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

key与value必须都是对象类型。

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

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

3、NSDictionary的创建:

初始化方法:NSDictionary *names6 = [[NSDictionary alloc]initWithObjectsAndKeys:@"frank",@"name1",@"monkey",@"name2",nil];    NSLog(@"%@",names6);

注意:先写value,再写key,一对key-value是一个元素,nil作为字典存放元素的结束标志。

便利构造器:NSDictionary *names7 = [NSDictionary dictionaryWithObjectsAndKeys:@"frank",@"name1",@"monkey",@"name2",nil];    NSString*name = [names7 objectForKey:@"name1"];

NSLog(@"%@",name);

字面量:使用“@{}”,“{}”中存入字典元素,key-value一一对应,元素之间使用“,”相隔。  例如:NSDictionary *name8 =@{@"name1":@"frank",@"name2":@"monkey"};  NSString*name1 = name8[@"name1"];

NSLog(@"%@",name1);

4、NSDictionary的常用操作:

获取字典中键值对的个数:@property(readonly) NSUInteger count;  例如:NSLog(@"%ld",name8.count);

获取字典中所有的键(字典的一种便利方式):@property(readonly,copy) NSArray *allKeys;  例如:NSArray *keyArray = name8.allKeys;

for(int i =0; i < keyArray.count; i++) {

NSString *key = keyArray[i];

NSString *value = [name8 objectForKey:key];

NSLog(@"%@ %@",key,value);

}

获取字典中所有的值:@property(readonly,copy) NSArray *allValues;  例如: NSLog(@"%@",name8.allValues);

根据键获得对应的值:- (id)objectForKey:(NSString*)anAttribute;  例如:NSString *anAttribute = [name8 objectForKey:@"name1"];

5、NSMutableDictionary概述:

NSMutableDictionary(可变字典)的父类是NSDictionary,NSMutableDictionary具有NSDictionary所有方法,同时在其基础上添加了增加、修改、删除的操作。

6、NSMutableDictionary创建:

初始化方法:NSMutableDictionary *names9 = [[NSMutableDictionary alloc] initWithCapacity:0];

//创建一个空字典

NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];

便利构造器:NSMutableDictionary *name9 = [NSMutableDictionary dictionaryWithCapacity:0];

//NSMutableDictionary *mutableDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"文强",@"name",@"12",@"age",nil];

字面量:NSMutableArray *name0 = [@{@"name1":@"frank",@"name2":@"duck"} mutableCopy];

7、NSMutableDictionary常用操作:

字典中添加新的键值对以及修改某一对键值对:- (void)setObject:(id)anObject forKey:(id)aKey;  例如:[name0 setObject:@"dog" forKey:@"name1"];  NSLog(@"%@",name0);

移除指定的键对应的键值对:- (void)removeObjectForKey:(id)aKey;  例如:[name0 removeObjectForKey:@"name1"];  NSLog(@"%@",name0);

移除字典中所有的键值对:- (void)removeAllObjects;  例如:[name0 removeAllObjects];  NSLog(@"%@",name0);

三、集合类

1、集合的描述:

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

2、集合的特点:

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

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

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

3、NSSet的创建:

初始化方法:NSSet *se = [[NSSet alloc] initWithObjects:@"frank",@"duck",@"monkey",nil];

便利构造器:NSSet *se1 = [NSSet setWithObjects:@"frank",@"duck",@"monkey",nil];

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

4、NSSet的常用操作:

获取集合中对象的个数:@property(readonly)NSUIntegercount;  例如:NSUInteger count = [se count];

获取集合中所有的对象:@property(readonly,copy)NSArray*allObjects;  例如:NSArray  *allObjects = [se allObjects];

从集合中取出一个对象:- (id)anyObject;  例如:NSString *s = [se anyObject];

判断集合中是否包含某一个指定的对象:- (BOOL)containsObject:(id)anObject;  例如:NSInteger anObject5 = [se containsObject:@"frank"];

5、NSMutableSet概述:

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

6、NSMutableSet创建:

初始化方法:NSMutableSet *se3 = [[NSMutableSet alloc]initWithCapacity:0];

便利构造器:NSMutableSet *se4 = [NSMutableSet setWithCapacity:0];

7、NSMutableSet常用操作:

添加一个对象:- (void)addObject:(id)object;  例如:[se3 addObject:@"dog"];

移除一个对象:- (void)removeObject:(id)object;  例如:[se3 removeObject:@"dog"];

移除所有对象:- (void)removeAllObjects;  例如:[se3 removeAllObjects];


总结:OC中为我们提供了三大容器,数组,字典和集合,三个容器中存储的都是对象类型。

数组:是一个有序的集合,当我们需要管理有序的一组对象的时候需要使用数组。

字典:是一个无序集合,里面存储的对象是一个一个的键值对,我们获取数据的时候需要使用对应的key来操作,并且key在字典中是唯一的。

集合:集合是一个无序的容器,并且容器中的对象不能够重复。

可变容器类对象是不可变容器类对象的子类,在拥有父类功能的基础上,扩充了对原有对象的增删改操作。

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

推荐阅读更多精彩内容

  • 数组: 系统提供的数组类:类似于C语言中的数组功能。 数组是一个大容器,数组中可以储存不同的联系对象,但必须要保证...
    Sherry宇阅读 352评论 0 0
  • 一、类和对象 1.定义:类是具有相同特征和行为的事物的抽象,对象是类的具体化,类是对象的类型。 2.面向对象的三大...
    陈亮宇阅读 370评论 1 6
  • 数组 1、固定数组 2、可变数组 3、数组转换 字典 1、不可变字典 2、可变字典 集合 //NSSet 是无序的...
    孙玮超阅读 14,084评论 0 13
  • 数组 1、固定数组 1.创建数组(不可变数组创建后不可变,在创建的时候要初始化)//对象方法 [[NSArray ...
    Maxfire阅读 2,073评论 0 1
  • 1. 熟悉Git的基本流程 git clone git add -A git commit -m " " git ...
    9bf19a4010ab阅读 1,612评论 0 2