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

来源:互联网 发布:如何运营淘宝商城 编辑:程序博客网 时间:2024/06/16 02:28
20、   - (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
这是用来排序的函数,comparator 这个参数,需要传入一个返回结果是NSComparisonResult 的函数,
主要的函数,类似的函数如下:
- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale; 
- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
都可以进行调用
以 localizedCompare: 函数为例进行调用


NSArray *arr = [[NSArray alloc] initWithObjects:@"test", @"abc", @"xyz", nil];
    NSLog(@"Befor sort:%@", arr);
    SEL sel = @selector(localizedCompare:);
    arr = [arr sortedArrayUsingSelector:sel];
    NSLog(@"After sort:%@", arr);
    得到的结果是:
abc,
test,
xyz


21、用来获取数组中range.location 开始,数据各数 为range.length 的数据,并放置到一个新的数组中
以数组 为例  
NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
- (NSArray *)subarrayWithRange:(NSRange)range;
如:
NSArray *test = [array subarrayWithRange:NSMakeRange(2, 2)];
tom,
test
    注意range 的数值不要越界。
22、写入数组中的数据,到指定path 的目录中:
参数:atomically 是否把文件保存到辅助文件中
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;




23、如同上面的方法一样,所不同的是写入数组中的内容到 网上指定的路径。
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;




24、这个方法的实现类似于,数组中的元素,都是类对象,aselector 是这些类中的无参方法。
- (void)makeObjectsPerformSelector:(SEL)aSelector;
调用例子如下:
    首先新建一个ObjectTest 的类,在其中实现一个 无参数方法 - (void)tttttt
    在这个方法的实现中可以打印一些日志
    - (void)tttttt
{
NSLog(@"==========asasdfasdfasdfas===========");
}




    NSArray *array = [NSArray arrayWithObjects:[[[ObjectTest alloc] init] autorelease],[[[ObjectTest alloc] init] autorelease], nil];

调用格式如下,    
    [array makeObjectsPerformSelector:@selector(tttttt)];
    
    这时就可以看到打印的日志信息了。
25、这个方法的调用和上面一个方法类似,所不同的是这个对象调用的方法是一个可以带参数的方法。参数的类型是id ,也就是可以是任意的类型。
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;


26、  用来根据indexes 获取一个数组, NSIndexSet 是一个用来管理 index 的对象。
- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;


例子如下:
   NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
 
    //NSIndexSet *se = [NSIndexSet indexSetWithIndex:0];
    或者是
    NSIndexSet *se = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2, 2)];
    
    NSArray *test = [array objectsAtIndexes:se];
    NSLog(@"%@",test);


27、返回指定下标的一个对象。这个方法类似 objectAtIndex:
- (id)objectAtIndexedSubscript:(NSUInteger)idx


28、使用block 块遍历整个数组。这个block 需要三个参数,id obj 表示数组中的元素。
NSUInteger idx 标示元素的下标,
bool *stop 是一个bool类型的参数。 官方描述如下:
A reference to a Boolean value. The block can set the value to YES to stop further processing of the array. 
The stop argument is an out-only argument. You should only ever set this Boolean to YES within the Block.
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block 
调用例子如:


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


   [array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){
       NSLog(@"%@,%d",str,index);
   }];
29、同上面的方法一项,区别在于,这里多添加了一个参数,用来标示 是从前向后遍历,还是从后往前遍历。
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block
调用例子如下:
NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];


    [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
        NSLog(@"%@,%d",str,index);
    }];
30、    同上面的方法一项,不过NSIndexSet 参数标示,根据下标取出的数组,这里真正在block 中遍历的数组,是根据NSindexSet 取到的子数组
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block 
调用如下:
[array enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)] options:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
        NSLog(@"%@,%d",str,index);
    }];
31、 根据条件用来获取一个NSUIndex 对象,主要是根据条件进行数据遍历使用
- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate

调用如下:
NSInteger index = [array indexOfObjectPassingTest:^ BOOL (id tr,NSUInteger index, BOOL *te){
        NSString *s = (NSString *)tr;
        if([@"wendy" isEqualToString:s])
        {
            return YES;
        }
        return NO;
    }];
    
    NSLog(@"index==%d=.",index);
32、同上面的方法相同,却别在于,这里添加了一个参数,用来表示遍历是从前向后遍历还是从后遍历。
- (NSUInteger)indexOfObjectWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


33、这个添加了参数NSIntexSet 参数,用来获取子数组,然后使用这个子数组进行遍历,处理数据
- (NSUInteger)indexOfObjectAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


31、 根据block 的处理获取一个NSIndexSet 对象。
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
调用如下:
    NSIndexSet *index = [array indexesOfObjectsPassingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){
        
        NSString *s = (NSString *)tr;
        if([s isEqualToString:@"andy"]){
            return YES;
        }
        return NO;
    }];


    NSLog(@"%@",index);
33 、 这个方法添加了参数,用来表示,是从前向后,遍历还是从后向前遍历
- (NSIndexSet *)indexesOfObjectsWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);


调用示例如下:
    NSIndexSet *index = [array indexesOfObjectsWithOptions:NSEnumerationReverse passingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){
        
        NSString *s = (NSString *)tr;
        if([s isEqualToString:@"andy"]){
            return YES;
        }
        return NO;
    }];


    NSLog(@"%@",index);


34、 添加参数NSIndexSet 用来获取子数组,使用子数组进行遍历
- (NSIndexSet *)indexesOfObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate


35、对数组进行排序操作  参数cmptr 是一个block 函数块,返回的数据类型是一个NSComparisonResult 对象
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr 


调用例子如下:
NSArray *te = [array sortedArrayUsingComparator:^ NSComparisonResult (NSString *s,NSString *s2){
        if(s.length < s2.length){
            return NSOrderedAscending;
        }
        if(s.length > s2.length){
            return NSOrderedDescending;
        }
            
       return NSOrderedSame;
    }];
    
    NSLog(@"te=%@.",te);
36、进行排序操作,NSSortOptions 排序的参数 用来表示是同时排序,还是稳定执行。
- (NSArray *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr NS_AVAILABLE(10_6,4_0);
    
    NSArray *test = [array sortedArrayWithOptions:NSSortStable usingComparator:^ NSComparisonResult (NSString *s,NSString *s2){
    
        if(s.length < s2.length){
            return NSOrderedAscending;
        }
        if(s.length > s2.length){
            return NSOrderedDescending;
        }
        
        return NSOrderedSame;
    }];
    
    NSLog(@"%@",test);