【基础知识点】
a: Foundation中数组(NSArray)是有序的对象集合
b: NSArray只能存储Objective-C的对象,而不能存储像int、float这些基本数据类型,但是Objective-C对C兼容,所以在Objective-C程序中,仍然可以使用C的数组来存储基本数据类型
c: NSArray一旦创建便不可以再对它就进行更改,如果要进行对数组的增、删、改等操作的话,需要使用NSArray的子类NSMutableArray来创建对象
一、不可变数组NSArray
1 使用arrayWithObjects创建NSArray
NSArray *arr = [NSArray arrayWithObjects:@"abc",@"def",@"123",nil];
// NSArray *arr = [[NSArray alloc] initWithObjects:@"111",@"ddd",@"234",nil];
2 使用arrayWithArray创建NSArray 【NSArray 转 NSArray,NSMutableArray 转 NSArray】
NSArray *arr1 = [NSArray arrayWithArray:arr];
// NSArray *arr1 = [[NSArray alloc]initWithArray:arr];
// arr可以是NSArray或者NSMutableArray
3 使用@创建NSArray,只能创建不可变数组
NSArray *arr2 = @[@"aaaa",@"bbb",@"ddddd"];
NSLog(@"arr2 = %@",arr2);
4 返回元素个数
NSLog(@"arr2 count = %ld",[arr2 count]);
5 返回指定位置id
NSString *str0 = [arr2 objectAtIndex:2];
NSLog(@"str0 = %@",str0);
6 访问数组的最后一个元素
NSString *str = [arr2 lastObject];
NSLog(@"str = %@",str);
7 访问数组的第一个元素
NSString *str1 = [arr firstObject];
NSLog(@"str1 = %@",str1);
8 判断数组内是否含有某一个对象
if([arr containsObject:@"123"]) {
NSLog(@"含有此对象");
}
9 获取某个对象在数组中的下标值
NSUInteger index = [arr indexOfObject:@"123"];
10 数组的遍历
for(NSInteger i =0;i < [arr count]; i++) {
NSLog(@"arr[%ld] = %@",i,arr[i]);
}
11 快速枚举法(快速遍历)
for(id obj in arr) {
NSLog(@"obj = %@",obj);
}
二、可变数组NSMutableArray
1 实例化一个空的可变数组
NSMutableArray *nsarr = [[NSMutableArray alloc]init];
//NSMutableArray *aa1Group=[NSMutableArray arrayWithCapacity:5];
【NSArray 转 NSMutableArray】不可变数组array2转化为可变数组array3
NSMutableArray * array3 = [[NSMutableArray alloc]initWithArray:array2];
//NSArray * array2 = @[@"1",@"2",@"3"];
2 添加一个元素
[nsarr addObject:@"ONE"];
NSLog(@"nsarr = %@",nsarr);
3 添加多个元素
[nsarr addObjectsFromArray:@[@"ONE",@"TWO",@"THREE"]];
NSLog(@"nsarr = %@",nsarr);
等价于###在数组中追加数组
NSArray * array4 = @[@"g",@"h",@"i"];
[array addObjectsFromArray:array4];
4 插入元素
[nsarr insertObject:@"Two" atIndex:1];
NSLog(@"nsarr = %@",nsarr);
5 替换元素
[nsarr replaceObjectAtIndex:0 withObject:@"1"];
NSLog(@"nsarr = %@",nsarr);
6 查询元素
NSString *result = [nsarr objectAtIndex:1];//arr[1]
NSLog(@"result = %@",result);
7 删除指定元素
[nsarr removeObject:@"ONE"];
NSLog(@"nsarr = %@",nsarr);
8 删除指定下标的元素
[nsarr removeObjectAtIndex:2];
NSLog(@"nsarr = %@",nsarr);
9 删除最后一个元素
[nsarr removeLastObject];
NSLog(@"nsarr = %@",nsarr);
10 删除所有元素
[nsarr removeAllObjects];
NSLog(@"nsarr = %@",nsarr);
11 删除数组中含有的所有元素
[nsarr removeObjectsInArray:@[@"1",@"THREE"]];
12 交换元素
NSMutableArray *nsarr1 = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",nil];
[nsarr1 exchangeObjectAtIndex:1 withObjectAtIndex:2];
NSLog(@"nsarr1 = %@",nsarr1);
13 切割字符串
NSString *str3 = @"I am a super man + beautiful, yeah!";
14 用指定的字符串进行切割
NSArray *rArr = [str3 componentsSeparatedByString:@" "];
NSLog(@"rArr = %@",rArr);
15 实例化一个字符集合
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@" ,+"];
16 按照字符集合所提供的字符进行切割
NSArray *rArr2 = [str3 componentsSeparatedByCharactersInSet:set];
NSLog(@"rArr2 = %@",rArr2);
17 拼接数组内的字符串
NSString *str2 = [rArr2 componentsJoinedByString:@"-"];
NSLog(@"str2 = %@",str2);
18 按照ASCII码大小进行排序,SEL:方法选择器(储存一个方法名)
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"B",@"A",@"C",@"Z",nil];
[arr3 sortedArrayUsingSelector:@selector(compare:)];//方法选择器
19 按三个人年龄大小排序
Person *per0 = [[Person alloc]initWith:18];
Person *per1 = [[Person alloc]initWith:6];
Person *per2 = [[Person alloc]initWith:60];
NSMutableArray *perArr = [[NSMutableArray alloc]initWithObjects:per0,per1,per2,nil];
//compareAge提供一个排序方法,看按什么方式排序
NSArray *resultPerArr = [perArr sortedArrayUsingSelector:@selector(compareAge:)];
【附加知识】
#pragma mark 将数组的元素进行拼接
// 只对字符串对象操作
NSString * str4 = [array componentsJoinedByString:@" "];
NSLog(@"%@",str4);
#pragma mark 将字符串进行拆分
NSString * str5 = @"YES,I am a so bad man";
//拆分字符串
NSArray * array4 = [str5 componentsSeparatedByString:@" "];
NSLog(@"%@",array4);
//拆分字符串,生成一堆新的子串,原字符串不变,该方法创建一个数组,将每个子串添加到当前数组中.
// NSCharacterSet * set = [NSCharacterSet characterSetWithCharactersInString:@", "];
NSArray * array5 = [str5 componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", "]];
//set是集合
//[NSCharacterSet characterSetWithCharactersInString:@", "]这个方法创建一个集合的对象,返回对象地址,字符集合中的字符,来自字符串的@", "
NSLog(@"%@",array5);
#pragma mark 数组元素的混杂
Dog * dog1 = [[Dog alloc]init];
Cat * cat1 = [[Cat alloc]init];
Dog * dog2 = [[Dog alloc]init];
Cat * cat2 = [[Cat alloc]init];
Dog * dog3 = [[Dog alloc]init];
NSArray * array6 = @[dog1,cat1,dog2,dog3,cat2];
//判断对象属于某个类
//-(BOOL)isKindOfClass:(Class)class;
for (id obj in array6) {
if([obj isKindOfClass:[Dog class]]){
NSLog(@"B 哥");
}
if([obj isKindOfClass:[Cat class]]){
NSLog(@"小 龙");
}
}