OC-NSArray

2.OC中的数组
什么是OC数组?
答:a.OC的数组元素是任意类型的对象指针(即:地址);它的结构和C语言的链表结构相似;同时,它也是一种有序的集合。
------------------------------------------------------------------------------------
1)分类:     不可变数组NSArray    和    可变数组NSMutableArray
------------------------------------------------------------------------------------
2)创建一个OC的不可变数组对象
方法一:
NSArray * array = [[NSArrayalloc]initWithObjects:@"one",@"two",@"three",nil];
//nil是OC数组初始化时的一个结束标志,不是数组元素

方法二:
//将一个数组对象(array)的内容,初始化给另一个数组对象(array1)
NSArray * array1 = [NSArrayarrayWithArray:array];
------------------------------------------------------------------------------------
3)对不可变数组的一些操作

操作一:
//通过下标访问对应的数组元素,不要越界访问
例如:
NSString * str = [arrayobjectAtIndex:0];

操作二:
//获取数组元素个数
例如:
NSUInteger count = array.count;
------------------------------------------------------------------------------------
4)数组枚举器(用于遍历数组)

注意://在用枚举器遍历数组时,数组的值只能读,不能改

操作一:
//创建一个正序的数组枚举器
NSEnumerator * enumer1  = [arrayobjectEnumerator];        
//执行过程://数组创建了一个枚举器,把数组的元素地址依次传给枚举器;这个时候数组将会和枚举器建立一种关联

操作二:
//使用枚举器遍历数组
例如:
id obj;
while (obj = [enumer1nextObject]) 
{
   NSLog(@"obj = %@",obj);
}
执行过程:
第一次循环,枚举器会把数组的第一个元素赋给obj;第二次循环,枚举器把数组的第二个元素赋给obj,依次类推直到最后,把nil赋给obj.

操作三:
//使用快速枚举(正序)遍历数组
例如:
for (id obj2in array) 
{
   NSLog(@"obj2 = %@",obj2);
}
执行过程:
第一次循环,枚举器会把数组的第一个元素赋给obj2;第二次循环,枚举器把数组的第二个元素赋给obj2,依次类推直到最后,把nil赋给obj2.

操作四:
//逆序枚举器
例如:
//数组逆序把元素地址传给枚举器
NSEnumerator * enumer2 = [arrayreverseObjectEnumerator];
//第一次循环把数组的最后一个元素赋给obj 第二次把倒数第二个赋给obj 依次类推直到最后;
while (obj = [enumer2nextObject]) 
{
   NSLog(@"obj = %@",obj);
}
------------------------------------------------------------------------------------
5)数组查找元素

方法一:
//数组查找元素,找到之后返回对应的(第一个找到的下标)下标找不到返回NSNotFound
NSUInteger index = [arrayindexOfObject:@"one"];

方法二:
//在指定范围内查找;
NSUIntegerindex = [arrayindexOfObject:@"one"inRange:NSMakeRange(1, array.count -1)];

***********************************************************************
3.获取类/对象的类型

1)获取某对象的类型
Class cls = [dog1class];
//获取dog1指向的对象的类的类型
------------------------------------------------------------------------------------
2)获取某个类的类型        
[Dogclass];//获取Dog类的类型
------------------------------------------------------------------------------------
3)//判断id类型指向的对象,是否是某类的一个实例对象
id obj;
BOOL ret = [objisKindOfClass:[Dogclass]];
//判断obj指向的对象是否是Dog类的一个实例对象

***********************************************************************
4.打印对象指针     与    description函数  
执行过程:如果要打印对象指针,系统会给指针指向的对象发送一个description ,然后会找当前对象的类有没有description方法,有那么就调用,没有就去父类找(NSObject实现的description只是打印对象的地址),那么如果想打印出对象指针指向的对象内容,我们必须要重写description消息。

例如:
NSString * str =@"welcome to beijing";
NSLog(@"%@",str);//[str description]
Dog *dog = [[Dogalloc]initWithAge:10name:@"Tom"];
NSLog(@"dog = %@",dog);//打印对象指针等价于打印这个函数调用[dog description];
NSLog(@"dog = %@",[dogdescription]);//打印对象指针;实际上会调用description方法;
//那么如果想打印出dog对象指针指向的对象内容(age和name的值)我们必须要重写description消息


重写的description
例如:
//描述一个对象的具体信息(描述一个对象的内容是什么)
- (NSString *)description
{
   NSString * str = [NSStringstringWithFormat:@"age = %d name = %@",age,name];
   return str;
}


***********************************************************************
5.字符串的分割
方法一:
NSString * str =@"You are a good  man!";
NSArray * array  = [strcomponentsSeparatedByString:@" "];//以字符串整体作为分割条件
NSLog(@"str = %@",str);
NSLog(@"array = %@",array);
***注意//分割函数的返回值是一个NSArray*;

方法二:
array = [strcomponentsSeparatedByCharactersInSet:[NSCharacterSetcharacterSetWithCharactersInString:@" !"]];//按照字符进行分割
执行过程:
//NSCharacterSet 字符集合类
//[NSCharacterSet characterSetWithCharactersInString:@" !"];创建一个字符集合
//把Oc字符串@“ !”转化为字符集合;
//字符集合的成员是字符' '和字符‘!’;
注意:        
//OC字符串在分割的时候,如果分割条件两边只要一边没有内容或者没有不是分割条件的内容,那么会分割说一个空字符串@"";
//@"good !man!";man后面的!因为右边没有内容所以会分割出一个@"";
//因为good !;空格和! 都有一边是分割条件(也就是说不是非分割条件)这个时候也会分割说一个空的字符串
***********************************************************************
6.字符串拼接
例如:
NSString * ptr = [arraycomponentsJoinedByString:@"###"];
//把数组元素按照@”###“这个字符串拼接成一个字符串;
***注意//字符串拼接函数返回值类型:NSString*
***********************************************************************
7.可变数组对象

1)创建一个可变数组
方法一:
NSArray * array1 = [[NSArrayalloc]initWithObjects:@"1",@"2",nil];

方法二:
//把不可变数组转化为可变数组
NSMutableArray * array2 = [NSMutableArrayarrayWithArray:array1];

方法三:
//创建一个空的可变数组
NSMutableArray * array3 = [[NSMutableArrayalloc]init ];


2)对可变数组的操作:增、删、改、排序

---------增----------
//增加一个元素
[array4addObject:@"iOS"];

---------删----------
方法一:
//删除"ios"这个元素,如果包含多个,则都删除
[array4removeObject:@"iOS"];

方法二:
//删除所有
[array4removeAllObjects];

方法三:
//删除最后一个元素
[array4removeLastObject];

方法四:
//再一定范围内删除某元素
[array4removeObject:@"iOS"inRange:NSMakeRange(1,3)];

---------改----------
[array4replaceObjectAtIndex:0withObject:@"Android"];//替换(修改元素)

---------交换----------
[array4exchangeObjectAtIndex:0withObjectAtIndex:4];//交换


NSSet:
是一个集合与数组差不多,但是集合中的元素不能有重复的而且他是无序的

数组排序

有很多各种各样的方法来对一个数组排序。如果数组存储的是字符串对象,sortedArrayUsingSelector:是第一选择:

 
 
  1. NSArray *array = @[@"John Appleseed", @"Tim Cook", @"Hair Force One", @"Michael Jurewitz"]; 
  2. NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

 

下面的代码对存储数字的内容同样很好,因为NSNumber实现了compare::

 
 
  1. NSArray *numbers = @[@9, @5, @11, @3, @1]; 
  2. NSArray *sortedNumbers = [numbers sortedArrayUsingSelector:@selector(compare:)]; 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值