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