IOS之NSArray 中调用的方法详解

下面的例子以 
NSArray *array = [NSArray arrayWithObjects:@“wendy”,@“andy”,@“tom”,@“jonery”,@“stany”, nil];
1、获取数组中总共有多少个对象。

-(NSUInteger)count; NSLog(@“%d”,[array count]); 2 2、获取数组中下标对应的元素对象.(下标是从0开始)

-(id)objectAtIndex:(NSUInteger)index;

3、在当前数据中追加一个新的对象,并且返回一个新的数据对象(新的数组对象和被追加的对象,是两个不同的数组对象)。

-(NSArray *)arrayByAddingObject:(id)anObject; 4、在当前的数组中追加一个新的数据,并且返回一个新的数组对象。

-(NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray; 5、使用当前的数组生成一个字符串,新生成的字符串使用提供的separator 字符进行分割。

-(NSString *)componentsJoinedByString:(NSString *)separator; [array compontsJoinedByString:@“,”]; 运行结果: wendy,andy,tom,jonery,stany 6、检测数据中是否包含指定的对象元素

-(BOOL)containsObject:(id)anObject; [array containsObject:@“tom”]; YES 7、使用当前的数组生成字符串。可以重写description 改变生成的字符串。相当于java 中的toString 方法。

-(NSString *)description; 运行结果 ( wendy, andy, tom, jonery, stany ) 8、根据设置的locale 进行连接数组

-(NSString *)descriptionWithLocale:(id)locale;

-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;

9、两个数组的第一个元素是否相同,如果相同,则返回 数组中,第一个元素的字符串,反之,返回null 对象

-(id)firstObjectCommonWithArray:(NSArray *)otherArray; 10、 从数组中获取 NSRange 对象的数据存放到objects 中,NSRange 的数据标示从location,开始后面length 个数据

-(void)getObjects:(id__unsafe_unretained [])objects range:(NSRange)range;

NSArray *array = [NSArray arrayWithObjects:@“wendy”,@“andy”,@“tom”,@“jonery”,@“stany”,@“张山名称”,@“asdta”, nil];

NSRange range = NSMakeRange(1, 5);

id *objects;

objects = malloc(sizeof(id) * range.length);

[array getObjects:objects range:range];

for(int i = 0; i < range.length; i++){
NSLog(@“%@”,objects[i]);
}

free(objects);

运行的结果

andy
tom
jonery
stany
11、 判断制定的anObject 对象是否存在数组中如果存在返回,对象所在的下标

-(NSUInteger)indexOfObject:(id)anObject; 如果不存在,返回的NSUInteger 与 NSNotFund 相同 NSUIndex index = [array indexOfObject:@“stan”]; if(index == NSNotFound) { 对象不在数组中
}

11-1、 判断制定的元素,是否在数组中,数组查询的位置,是从range.location 的位置开始,到range.length 的长度结束。

-(NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range; 如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。 实质是使用isEqual 进行比较

12、
同上面两个方法一项,测试指定的对象是否在数组中不同的是,这里使用指针进行比较

-(NSUInteger)indexOfObjectIdenticalTo:(id)anObject; 如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。

-(NSUInteger)indexOfObjectIdenticalTo:(id)anObject inRange:(NSRange)range;

13、比较两个数组是否相同 ,数组长度相同,并且相同位置上的元素也相同。

-(BOOL)isEqualToArray:(NSArray *)otherArray; 14、返回最有一个元素,如果一个数组的长度为0 返回的对象为nil

-(id)lastObject; 15、使用数组返回一个 NSEnumerator 对象,这个对象类似与一个指针,可以用来遍历 整个数组 指针从前向后遍历

-(NSEnumerator *)objectEnumerator;
示例如下
NSEnumerator *enu = [array objectEnumerator];

id *obj;
while (obj = enu.nextObject) {
NSLog(@“obj===%@==”,obj);
}
16、 返回一个NSEnumerator 对象,这个对象类似一个指针,可以用来遍历真个数据,所不同的是,这个指针,是从后向前遍历。

-(NSEnumerator *)reverseObjectEnumerator;
17、生成一个NSData 的对象,主要是用来进行数组的排序。 在下面的方法中使用这个对象

-(NSData *)sortedArrayHint;
18、 进行数组的排序

-(NSArray )sortedArrayUsingFunction:(NSInteger ()(id,id, void *))comparator context:(void *)context;
这个方法类似苹果实现了一个简单的 排序方法。但是实现的规则需要自己进行处理。
类似的方法如下。 首先提供一个 普通的排序算法,函数和c 的方法类似
NSInteger sortType(id st,id str,void *cha)
{
NSString *s1 = (NSString *)st;
NSString *s2 = (NSString *)str;

if(s1.length > s2.length)
{
return NSOrderedAscending;
}else if(s1.length < s2.length)
{
return NSOrderedDescending;
}

return NSOrderedSame;
}

NSArray *array = [NSArray arrayWithObjects:@“wendy”,@“andy”,@“tom”,@“test”, nil];

NSArray *a = [array sortedArrayUsingFunction:sortType context:nil];

NSLog(@“a=%@”,a);
NSArray 为需要排序的数组,返回一个排序完成的数组,再执行osrtedArrayUseingFunction 方法时会,会自动调用上面的sortType 方法,并且,可以按照你
的需要调整上面的规则

19、和上面的方法类似,也是苹果用来进行排序的。所不同的是,需要传入一个NSData 的数据。

-(NSArray )sortedArrayUsingFunction:(NSInteger ()(id,id, void *))comparator context:(void *)context hint:(NSData *)hint;

NSData *dat = [array sortedArrayHint];
NSArray *a = [array sortedArrayUsingFunction:sortType context:nil hint:dat];

NSLog(@“a=%@”,a);

posted on 2015-04-15 09:26  韩江河  阅读(177)  评论(0编辑  收藏  举报