美文网首页iOS 基础知识
IOS之NSArray 中调用的方法详解(1)

IOS之NSArray 中调用的方法详解(1)

作者: 字母B一路向北 | 来源:发表于2016-06-28 12:11 被阅读166次

    下面的例子以
    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);

    相关文章

      网友评论

        本文标题: IOS之NSArray 中调用的方法详解(1)

        本文链接:https://www.haomeiwen.com/subject/pddtjttx.html