认识数组
1、C的数组用来存储基本类型或者是复合类型的数据。OC的数组是专门用来存储对象的,并且不能用来存储基本数据类型;OC中C数组和OC协同合作
2、C的数组中存的是相同类型的数据。OC的一个数组可以存储多种类的对象,OC数组的每个元素实质是存储一个对象的地址
3、OC的数组分为可变数组和不可变数组,这里的可变是指数组大小和数组中每个元素的顺序可变
一、数组的初始化(创建)
#pragma mark 不可变数组的创建
//1.使用简单粗暴的方式创建一个数组
NSArray * array1 = @[@"MingGe",@"100",person];
//%@可以打印任何类的对象
//使用NSLog打印对象的时候,其实是打印的这个对象的description返回
NSLog(@"%@",array1);
//=====使用对象方法初始化数组=====
//创建一个空的数组
NSArray * array2 = [[NSArray alloc] init];
//使用多个对象来初始化一个数组
NSArray * array3 = [[NSArray alloc] initWithObjects:@"aaa",@"7",person,@"hello",nil];
//使用一个数组初始化另一个数组
NSArray * array4 = [[NSArray alloc] initWithArray:array1];
//=====使用类方法初始化数组=======
//创建一个空的数组
NSArray * array5 = [NSArray array];
//使用不同的对象去初始化一个数组
//nil不能删除
NSArray * array6 = [NSArray arrayWithObjects:@"yuting",@"111",person, nil];
//使用一个数组去初始化另外一个数组
NSArray * array7 = [NSArray arrayWithArray:array1];
#pragma mark 可变数组的创建
//===========使用对象方法初始化一个可变数组=======
//创建一个空的可变数组
NSMutableArray * marray1 = [[NSMutableArray alloc] init];
//使用不同(相同)类的对象初始化一个可变数组
NSMutableArray * marray2 = [[NSMutableArray alloc] initWithObjects:@"000",@"111",person,@"99", nil];
//使用一个数组去初始化一个可变数组
//将一个不可变数组转化成为一个可变数组
NSArray * array = @[@"xixi",@"haha",@"hehe"];
NSMutableArray * marray3 = [[NSMutableArray alloc] initWithArray:array];
二、数组常用方法
通用方法:
1.以一个子串分割返回一个数组
- (NSArray *)componentsSeparatedByString:(NSString *)separator;
2.以字符集分割返回数组character
- (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;
3.用数组拼接成字符串
- (NSString *)componentsJoinedByString:(NSString *)separator;
#pragma mark 可变数组专有方法
#pragma mark 增加数组元素
//- (void)addObject:(id)anObject;
NSMutableArray * marray4 = [NSMutableArray array];
//添加一个数组元素
[marray4 addObject:@"aaa"];
//将一个数组的每个元素分别添加到可变数组
[marray4 addObjectsFromArray:array];
//- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
//在指定位置(下标)储插入一个对象
[marray4 insertObject:@"111" atIndex:2];
NSLog(@"%@",marray4);
#pragma mark 删除数组元素
//- (void)removeObject:(id)anObject;
//删除指定对象
[marray4 removeObject:@"aaa"];
id object_3 = [marray4 objectAtIndex:3];
[marray4 removeObject:object_3];
//- (void)removeObjectAtIndex:(NSUInteger)index;
//删除指定下标的数组元素
[marray4 removeObjectAtIndex:2];
NSLog(@"%@",marray4);
//- (void)removeAllObjects;
//删除数组的所有元素
[marray4 removeAllObjects];
#pragma mark 数组的最后一个元素(不可变数组也可以用)
//获取数组最后一个元素
[marray4 addObject:person];
id lastObject = [marray4 lastObject];
NSLog(@"%@",lastObject);
#pragma mark isKindOfClass
//isKindOfClasss:是用来判断一个对象是否是某一个类的对象
//判断lastObject是不是NSString的对象
if ([lastObject isKindOfClass:[NSString class]]) {
NSLog(@"字符串:%@",lastObject);
}
if ([lastObject isKindOfClass:[YTPerson class]]) {
NSLog(@"人:%@",lastObject);
}
#pragma mark 数组元素替换
//替换指定下标元素
//- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
[marray4 replaceObjectAtIndex:0 withObject:@"000"];
#pragma mark 交换两个数组元素
//- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
//交换两个指定下标的数组元素
[marray4 exchangeObjectAtIndex:1 withObjectAtIndex:5];
NSLog(@"%@",marray4);