NSArray数组(2)

 //数组最重要的功能:打包数据,方便参数传递


 》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"];


 NSMutableArray *tmp = [[NSMutableArray alloc]init];

for (NSString *str in array)
{
   if([str isEqualToString:@"two"])
   {
      [tmp addObject:str];
    }

//遍历临时数组
  for(int i = 0;i<tmp.count;i++)
 {
     NSString *str = [tem objectAtIndex:i];
    [array removeObject:str];  //从原数组中删除 临时数组中存储的对象
}






    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值