本文共 4775 字,大约阅读时间需要 15 分钟。
//数组最重要的功能:打包数据,方便参数传递
》1:使用for循环遍历数组
NSArray *array = @[@"one",@"two",@"three"];
for(int i = 0; i<array.count;i++){
NSString *str = array[i];
NSLog(@"array[%d] = %@",i,str);
} //array[0] = one array[1] = two array[2] = three
》2:oc 比c增加的数据类型:BOOL id NSObject *(OC中所有的对象类型,如NSString ,NSArray) block SEL
还增加了流程控制语句:增强for循环 for(NSObject *obj in array)
//使用增强for循环的方式遍历数组
//array.count 值是多少,他就会循环多少次,每一次都取出数据中的一个元素存储到str中
for(NSString*str in array)
{
NSLog(@"str = %@",str); //str = one str =two str = three
}
》3:注意事项:如果你的数组中存储了多种类型的数据,那么最好不要调用某个对象特有的方法,会导致程序崩溃。
在实际开发中,一个数组往往只负责存储一种数据类型
Person *p1 = [[Person alloc]init];
NSArray *array = @[@"one",[NSNumber numberWithInt:10,p1];
for(NSString *str in array
{
NSLog(@"array str %@",str);
// NSLog(@"str %ld,str.length); //这个是错误的,会报 unrecognized selector sent to instance 错误,找不到方法
}
》4:枚举器遍历数组
NSArray *array = @[@"one",@"two",@"three"];
NSEnumerator *enumerator = [array objectEnumerator]; //返回一个枚举器
NSString *value;
while(value = [enumerator nextObject]) //获得当前的元素(如果存在nextObject 就返回一个当前的值,存储到value中)
{
NSLog(@"enum str %@",value); //enum str one enum str two enum str three
}
》5:数组排序
(1)使用sortedArrayUsingSelector ,也是最简单的排序方式
NSArray *array = @[@"b",@"d",@"a",@"z"]; //array 里面的顺序是不会改变的
array = [array sortedArrayUsingSelector:@selector(compare:)]; //返回的是一个全新的数组array
//也可以这样写NSArray *array1= [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"排序后 %@",array); //结果为 排序后(a,b,d,z)
(2)使用block方式排序
NSArray *array = @[@"z",@"4",@"b",@"3",@"x"];
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
NSComparisonResult result = [obj1 compare:obj2];
return result;
//也可以直接这样写: return [obj1 compare:obj2]; //正序排序 (3,4,b,x,z)
return [obj2 compare:obj1]; //倒序排序(z,x,b,4,3)
} ];
(3)给自定义对象进行排序,用NSSortDescriptor进行
创建Person ,继承自NSObject
在Person.h中
@property (nonatomic,strong) NSString *name;
@property(nonatomic,assign)int age;
@property(nonatomic,strong)NSString *year;
-(id)initWithName:(NSString *)name andAge:(int)age andYear:(NSString *)year;
在Person.m中
-(id)initWithName:(NSString *)name andAge:(int)age andYear:(NSString *)year{
for(self = [super init]
{
_name= name;
_age = age;
_year = year;
}
}
+(NSString *)description
{
return [NSString stringWithFormat:@"name %@ ,age %d, year %@",_name,_age,_year];
}
在main.m中调用
Person *p1 = [[Person alloc]initWithName:@"zhong" andAge:22 andYear:@"1993"];
Person *p2 = [[Person alloc]initWithName:@"tang" andAge:19 andYear:@"1996"];
Person *p3 = [[Person alloc]initWithName:@"lii" andAge:34 andYear:@"1980"];
NSArray *array = @[p1,p2,p3];
//如果给自己定义的对象的排序,必须根据某个属性来排序。
//sortDescriptorWithKey 参数要的就是你对象中,要依据哪个属性来排序,就把那个属性的名字当成key传入
//ascending YES表示正序, NO表示倒序
NSSortDescriptor *d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
//NSSortDescriptor *d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:YES];
//如果你要使用多个属性来进行排序,默认在前面的NSSortDescriptor优先级比较高
NSArray *descripts = @[d1];
//NSArray *descripts = @[d1,d2];
array = [array sortedArrayUsingDescriptors:descripts];
NSLog(@"排序后 %@",array);
(4)给自定义对象进行排序,用sortedArrayUsingComparator进行
NSArray *array1 = @[p1,p2,p3];
array1 = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
Person *p1 = obj1;
Person *p2= obj2;
//year
return [p1.year compare:p2.year];
}];
》6:可变数组,改变的都是原来的数组
NSMutableArray 继承自NSArray
(1)创建可变数组
NSMutableArray *array = [[NSMutableArray alloc]initWithCapacity:0];
//使用addObject动态给数组增加元素,数组中可以存储同一个对象多次
[array addObject:@"one"];
[array addObject:@"two"];
[array addObject:@"three"];
[array addObject:@"one"];
NSLog(@"%@",array); //(one,two,three,one)
(2)指定对象插入的位置
NSString *str1 = @"one"'
[array insertObject:str1 atIndex:2] ;
(3)删除 会通过对象,删除数组中所有的同一地址的对象
[array removeObject:str1];
(4)通过索引的方式删除对象,超出了数组的count值,那就会导致异常 index beyond bounds
[array removeObjectAtIndex:0];
(5)删除数组中所有的元素
[array removeAllObjects];
(6)for 遍历数组
for(int i = 0;i<array.count;i++)
{
NSString *str = [array objectAtIndex:i];
//[array removeObject:str1]; 在遍历数组的时候,千万不要给数组中增加或者删除元素
NSLog(@" %@",str);
}
(7)增强for循环 遍历
for(NSString *str in array)
{
// [array removeObject:str1]; 如果在增强for循环 中删除元素,会直接导致异常出现
NSLog(@" %@",str);
}
(8)枚举器
NSEnumerator *enumerator = [array objectEnumerator];
NSString *value;
while(value = [enumerator nextObject]){
// [array removeObject:str1]; 如果在枚举器 中删除元素,会直接导致异常出现
NSLog(@" %@",str);
}
(9)要通过遍历的方式确定删除某个元素
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:@"one"];
[array addObject:@"two"];
[array addObject:@"three"];
[array addObject:@"one"];
转载地址:http://mxrvb.baihongyu.com/