数组是一个集合类,是有序的,可以根据编制的索引找到想要的结果。OC数组只能存储对象(如字符串、数组、字典等),不能存储基本数据类型(如int,float,char),也不能存储nil。分为不可变数组(NSArray)和不可变数组(NSMutableArray)。不可变数组一经创建就不能对其内容进行操作。本篇文章只介绍NSArray的一些简单用法。NSMutableArray继承自NSArray。
1、不可变数组的创建
1>初始化方法创建
Person* person=[[Person alloc]initWithName:@"zhao"]; //自定义的类
NSArray* arr1=[[NSArray alloc]initWithObjects:@"1",@"2", @"3",person, nil]; //实例方法 注意nil不能少
NSArray *arr3=[NSArray arrayWithObjects:@"one",@"two",@"three",person, nil];//类方法
2>用一个已有数组创建
NSArray *arr2=[[NSArray alloc]initWithArray:arr1]; //实例方法
NSArray *arr4=[NSArray arrayWithArray:arr3]; //类方法
3>最简单的方法
NSArray *arr5=@[@"o1", @"o2", @"o3",@[@"xyz", @"123"]];
2、数组的遍历
NSArray *array=@[@"one", @"two",@"three"];
//得到数组的第一个元素
[array firstObject];
//得到数组的最后一个元素
[array lastObject];
NSUInteger len=array.count; //得到数组中元素的个数
//常用的一种遍历方法
for(NSUInteger i=0; i<len; i++)
{
NSLog(@"array[%lu]:%@", i, array[i]);
}
//快速遍历法
for(NSString* obj in array)
{
NSLog(@"元素:%@", obj);
}
//枚举器法
NSEnumerator * enumerator=[array objectEnumerator];
id obj;
while(obj = [enumerator nextObject])
{
NSLog(@"枚举器法元素:%@", obj);
}
打印结果:
3、数组元素的合并
NSArray *arr=@[@"i", @"love", @"you"];
//componentsJoinedByString:将一个数组以特定字符合并在一起 返回一个不可变字符串
NSString *result =[array componentsJoinedByString:@" "]; //用空格合并
NSLog(@"合并后的结果:%@", result);
打印结果:
4、数组的查找
1>indexOfObject: 从前往后查找到第一个相同的元素就返回它的下标
NSArray *array=@[@"123",@"xx", @"abc",@"xx",@"tt",@"xx",@"yy"];
NSUInteger index=[array indexOfObject:@"xx"];
NSLog(@"xx的下标:%lu", index);
2>indexOfObject: inRange: 查找指定范围内的数组是否有相同的元素 并返回第一个下标
index=[array indexOfObject:@"xx" inRange:NSMakeRange(2, 4)];
NSLog(@"指定范围找xx的下标:%lu", index);
3>containsObject: 判断数组中是否包含此元素
BOOL result=[array containsObject:@"abc"];
if(result)
NSLog(@"abc在数组中");
else
NSLog(@"abc不在数组中");
4>firstObjectCommonWithArray: 查找两个数组中的第一个公共元素
NSArray *arr1=@[@"wer",@"abc"];
NSString* str=[array firstObjectCommonWithArray:arr1];
NSLog(@"%@", str);
打印结果:
5、数组排序
1、数组里是字符串
NSArray *arr = @[@"12", @"34", @"a12", @"#59", @"6756"];
// 升序 按ASCII值得顺序排列
NSArray *ascendSortArr = [arr sortedArrayUsingSelector:@selector(compare:)];
// 降序
NSArray *deSortArr = [ascendSortArr reverseObjectEnumerator].allObjects;
NSLog(@"%@ %@", ascendSortArr, deSortArr);
2、数组里是模型,可以按特定属性名对应的属性值排序
// 第一个参数:模型中的属性名 第二个:升序或降序
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"属性名" ascending:YES];
[dataArray sortUsingDescriptors:@[descriptor]];
6、数组的KVC
NSArray * array = @[@{@"name":@"hwc", @"count":@(10), @"url":@"blog.csdn.net/hello_hwc"},
@{@"name":@"baidu", @"count":@(20), @"url":@"www.baidu.com"},
@{@"name":@"google", @"count":@(22), @"url":@"www.google.com"}];
NSArray *nameArray = [array valueForKeyPath:@"name"];
NSNumber *sum = [array valueForKeyPath:@"@sum.count"];
NSNumber *max = [array valueForKeyPath:@"@max.count"];
NSNumber *min = [array valueForKeyPath:@"@min.count"];
NSLog(@"NameArray:%@",nameArray.description);
NSLog(@"Sum:%@",sum.description);
NSLog(@"max:%@",max.description);
NSLog(@"min:%@",min.description);
打印结果:
NSArray不可变数组[1048:42991] NameArray:(
hwc,
baidu,
google
)
NSArray不可变数组[1048:42991] Sum:52
NSArray不可变数组[1048:42991] max:22
NSArray不可变数组[1048:42991] min:10