天天看點

2014資料整理--NSArray用法(二)

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);

37、指定區域傳回通過代碼塊方法的索引

typedef NS_OPTIONS(NSUInteger, NSBinarySearchingOptions) {

NSBinarySearchingFirstEqual = (1UL <<8),

NSBinarySearchingLastEqual = (1UL <<9),

NSBinarySearchingInsertionIndex = (1UL <<10),

};

- (NSUInteger)indexOfObject:(id)obj inSortedRange:(NSRange)r options:(NSBinarySearchingOptions)opts usingComparator:(NSComparator)cmp NS_AVAILABLE(10_6,4_0); // binary search