转载 NSArray



NSArray

NSArray是不可变的,而且只能储存Object-c对象。另外,数组的最后一个元素一定是nil,表示结束。

注:这些集合类只能收集cocoa对象(NSOjbect对象),如果想保存一些原始的C数据(例如,int, float, double, BOOL等),则需要将这些原始的C数据封装成NSNumber类型的,NSNumber对象是cocoa对象,可以被保存在集合类中。

数组常见的用法首先是创建数组,然后对数组进行操作。

对数组进行的常见操作可以分为:增(插入),删,改,查 , 取,遍历,排序,比较,

对于NSArray来说,因为本身是不可变的,所以对NSArray的操作没有增和删。

NSArray  *array = [ NSArray alloc] init ];

1.取

- (id)objectAtIndex : (NSInteger *)aValue   得到所给下标的数组中的值

- (NSInteger *)indexOfObject: (id)object  得到所给对象在数组中的下标

- lastObject;  得到数组中最后一个值

2.查

- containsObject :(id)object  查询是否包含所给对象

3.遍历数组

三种方法:1.in  2.遍历器  3.for

另外,NSArray还有一个非常强大的方法  -makeObjectsPerformSelector () ;这个函数可以将一个操作 作用在数组中的每个元素上。例如:

[array  makeObjectsPerformSelector:@selector(get:)] ;

4.排序

       1.字符串数组排序

         IOS提供一个sortedArrayUsingSelector ()函数,用于对字符串数组进行排序,方法会在排序后返回一个新的数组。

         [array  sortedArrayUsingSelector (@selector(xxxx:))];

         xxxx:方法需要你自己根据实际情况设定排序方式。有默认的排序方法 compare :

 

        2.数字数组排序

        将数字加入数组,首先要转换成NSNumber。然后再使用sortedArrayUsingSelector:

        注意取出数字元素的时候要换一下类型

        NSNumber *indicator = (NSNumber *)[ numberArray  objectAtIndex:idx];

        int  value  = [ indicator intValue ];

        

        3.对对象数组排序

          可以使用NSSortDescriptor对对象数组进行排序。

           @interface  Person :NSObject {

                   NSString *firstName;

                   NSString *lastName;

            }

           @property (nonatomic , retain ) NSString *firstName ;

           @property (nonatomic , retain ) NSString *lastName ;

           现在,有一个由Person对象组成的数组,对这个数组排序,使用sortUsingDescriptors:             

       NSSortDescriptor *sorter = [ NSSortDescriptor  alloc ] initWithKey : xxx   ascending:YES];                                            

           [array   sortUsingDescriptors : [ NSArray  arrayWithObject:sorter ]] ;

           

5. 对象数组过滤

       ios提供了一个filteredArrayUsingPredicate 方法,通过给定条件来进行过滤,过滤后形成一个新的数组。 而NSMutableArray提供了一个filterUsingPredicate方法,在原数组中保留符合条件的数组元素。            

 

6.增加和删除

NSArray本身是不可变的,所以也不能够进行正常的增加和删除操作,这里的这些操作只针对于NSMutableArray,写到这里是为了查询方便。

       1.增加

       2.删除

       删除数组元素可以使用数组的removeObjectAtIndex () ,因为数组在动态变化,所以比较安全的做法是,将满足条件的数组放入一个临时数组里,再将这个数组返回:

       - (NSArray *)filterPersonWithLastName : (NSString *)filterTest {

           Person *person = [[Person  alloc] init];

           NSMutableArray  *personList = [ person creatTempraryList ] ;

           NSLog (@ "before");

           [self  printingPersonArray : personList ];

           NSMutableArray *personsToRemove = [NSMutableArray  array] ;

           for ( Person *person  in  personList){

                   if  (filterTest  &&  [filterTest  rangeOfString :person.lastName    options:NSLiteralSearch].length  == 0 )

                      [ personsToRemove   addObject : person];

               }

               [personList  removeObjectInArray : personsToRemove ] ;

              NSLog (@"after");

               [ self  printingPersonArray:personList ];

               [ person release];

               return  personList;

       }

 

下面图片里是帮助文档里的,也就是NSArray所有的方法,我打出来的是学过的,也是比较常用的方法。

一. 创建一个数组


这些都是类方法,创建形式大致相同:

NSArray *anArray = [NSString  array];

NSArray *anArray2 = [NSArray  arrayWithObject : @“老王”,nil ];

当然,你也可以使用实例方法创建数组,并且通常我们也是这样做的。


这些是初始化方法,所以应该用alloc创建NSArray对象:

NSArray *array = [[NSArray alloc] initWithObjects : @"1", @"2",nil];

最后一个数据必须是nil,表示数组结束。

 

二. 查询

数组是有序的,所以对于数组会有很多查询的操作:


- (BOOL) containsObject : (id)anObject 判断数组中是否包含给定元素

- (NSUInteger) count是比较常用的方法,它会返回数组中元素的数量

- (id) objectAtIndex : (NSUInteger) index 返回指定下标的数组元素

(在使用这个方法的时候 , 前面如果你要声明一个变量 , 那么这个变量应该是与元素类型相同

如:  NSString *a = [xxx  objectAtIndex : 1 ];

)

- (id) lastObject 返回数组最后一个元素。这是个很有趣也很有用的方法,正常情况下我们可以使用上面两个方法的组合来获得最后一个元素,但是当数组中没有元素的时候,传入0就会引起程序崩溃,使用这个方法则很好的解决了这个问题,它会返回一个 nil 。

 

三.数组中查找对象的方法

提供了非常多的方法来查找对象,应该是为了以后对数据的操作的时候使用的,现在先放在这,以后要用了就可以参考:


四. 给元素发送消息


- (void)makeObjectsPerformSelector : (SEL)aSelector

让数组中所有元素都执行选择器中的方法。

 

五. 数组的比较


- (id) firstObjectCommonWithArray :(NSArray *)anotherArray  

   返回两个数组中第一个相同的对象元素。

- (BOOL) isEqualToArray : (NSArray *)anotherArray

比较两个数组内容是否相同

 

六. 派生出新的数组


- (NSArray*)arrayByAddingObject : (id)anObject

在数组末尾加入一个新的对象形成新的数组,旧数组依然在,新数组是copy了旧的数组,再加上要加入的对象形成的。

 

七. 排序


- (NSArray *)sortedArrayUsingSelector : (SEL)aSelector

返回一个数组,该数组是旧数组的元素经过选择器排序后的新数组。

 

八. 数组转字符串

- (NSString *) componentsJoinedByString : (NSString *)separator

根据传入的分割符(separator),将数组转化成字符串并返回。

 

九. 创建一个描述


 

十. 收集路径

- pathsMatchingExtensions ;

 

十一. Key-Value 观察


十二. Key-Value 编码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值