一、数组类
数组是一个有序的集合,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在字典中是唯一的。
集合:集合是一个无序的容器,并且容器中的对象不能够重复。
可变容器类对象是不可变容器类对象的子类,在拥有父类功能的基础上,扩充了对原有对象的增删改操作。