您的位置:首页 > 移动开发 > IOS开发

NSArray简介

2016-02-18 15:04 531 查看
数组是一个集合类,是有序的,可以根据编制的索引找到想要的结果。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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS NSArray