NSArray是OC语言的数组。区别于C语言数组的特点在于OC数组是一个对象,数组里面存储的也是一个个对象。不能直接存储基本数据类型(如int、long、short等等)。假如项目需求需要的话,可以先想基本数据类型转化成对象再进行存储。
我们来看看NSArray的几种创建方法
1通过对象的方法创建
NSArray *arr1 = [[NSArray alloc]initWithObjects:@"string1", @"string2",@"string3" , nil];
NSArray *arr2 = [[NSArray alloc]initWithArray:arr1];
2 通过类方法来创建
NSArray *arr3 = [NSArray arrayWithObjects:@"对象1", @"对象2",@"对象3", nil];
NSArray *arr4 = [NSArray arrayWithArray:arr1];
3 通过快捷方式创建
NSArray *arr5 = @[@"a",@"b",arr2, @"c", @"d", @"e"];
NSArray常用的方法
// 1、获取数组元素个数
NSArray *arr = @[@"1",@"2",@"2",@"2",@"2",@"2"];
NSUInteger count =[arr count];
// 2、通过索引号获取相应的元素(2种)
NSString *s = [arr objectAtIndex:0];
NSString *s2 = arr[3]; // 越界访问元素会导致程序崩溃;
// 3、取出最后一个元素
[arr lastObject];
// 4、通过对象地址获取在数组中的下标
[arr indexOfObject:@"five"]; // 如果没找到返回NSNotFound,找到返回下标
// 5、判断数组中数组包含元素anObject
[arr containsObject:@"five"];
6、取出数组中的一部分元素
// 1)subarrayWithRange消息
// 作用:取出数组中指定范围内range的元素
NSArray *a = [arrsubarrayWithRange:NSMakeRange(3, 5)];
2)objectsAtIndexes消息
作用:从数组中获取指定下标的元素
// 获取数组部分内容:(下标不连续)
// NSMutableIndexSet: 整数集合类;
NSMutableIndexSet *indexSet =[[NSMutableIndexSet alloc] init];// 创建一个空的整数集合对象;
// 需求: 获取arr数组第0,3,5,6个元素;
[indexSet addIndex:0]; // 把整数0添加进去
[indexSet addIndex:3]; // 把整数3添加进去
[indexSet addIndex:5]; // 把整数5添加进去
[indexSet addIndex:6]; // 把整数6添加进去
//调用方法objectsAtIndexes:根据indexSet里面整数序号获取对象的元素,组成数组返回
NSArray *b =[arrobjectsAtIndexes:indexSet];
NSLog(@"%@",b);
6、判断NSArray中存储的对象是否为指定类型的对象
因为NSArray里面存储任意类型对象, 怎么才知道存储的对象是属于哪一个类;
isKindOfClass使用
[对象 isKindOfClass:[类名 class]] 判断对象是否属于该类; 如果属于返回YES,否则返回NO;
NSArray数组的遍历
用c语言的遍历方法遍历一个数组的所有元素
1、通过下标遍历数组
for(NSInteger i = 0; i < [arr count] ;i++) {
arr[i];
}
2、NSEnumerator 枚举器
1)objectEnumerator消息
作用:正序输出所有元素
2)reverseObjectEnumerator消息
作用:逆序输出所有元素
3、快速枚举法
1)for in 语法
排序:
/// 乱序数组
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:@[@"c",@"e", @"d", @"b", @"a"]];
[array sortUsingSelector:@selector(compare:)];
NSLog(@"升序 = %@", array);
[array sortUsingSelector:@selector(myCompare:)];
NSLog(@"降序 = %@", array);