本文共 6529 字,大约阅读时间需要 21 分钟。
// ---------------------------------------------block 作为方法的参数
NSArray *array = @[@"1", @"2", @"3", @"4", @"5", @"3"]; // 笑笑语法 // 找出数组中@"3",输出 for (NSString *str in array) { if ([str isEqualToString:@"3"]) { NSLog(@"str = %@", str); break; } } // 第一个参数obj 枚举得到的数组元素 // 第二个参数idx 枚举出数组元素的下标 // 第三个参数stop 枚举停止的条件 [array enumerateObjectsUsingBlock:^(NSString * obj, NSUInteger idx, BOOL *stop) { if ([obj isEqualToString:@"3"]) { NSLog(@"%@ %lu", obj, idx); *stop = YES; } // 如果 *stop = YES ,就会结束这个快速枚举, *stop默认是NO }]; //! 以上两种方法都可以 forin 和 enumerateObjectsUsingBlock // ************************************ NSDictionary *dic = @{@"1":@"a", @"2":@"b", @"3":@"c"}; for (NSDictionary *key in dic) { NSLog(@"%@ = %@", key, dic[key]); // (笑笑语法)dic[key] == [dic objectForKey:key] } // 字典的block块遍历 // 第一个参数 字典中的key // 第二个参数 字典中key对应的value值 // 第三个参数 枚举结束的条件 [dic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ - %@", key, obj); //*stop = YES; }]; // *********************************** // --------------使用block作为方法的参数完成数组的排序 NSArray *arr = @[@"2", @"1", @"4", @"3", @"8", @"5"]; // ---方法一:数组排序(这种只能升序) NSArray * sortArray = [arr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@", sortArray); // ---方法2 : sortedArrayUsingComparator // 参数obj1 和 obj2 是数组中两个相邻的元素 // 此方法排序根据block块中返回值是NSOrderedAscending对应的判断条件为准,让相邻的两个元素交换位置(与 NSOrderedAscending,NSOrderedSame 无关) NSArray *sortArray2 = [arr sortedArrayUsingComparator:^NSComparisonResult(NSString * obj1, NSString * obj2) { if (obj1.intValue > obj2.intValue) { return NSOrderedDescending; }else if (obj1.intValue < obj2.intValue) { return NSOrderedAscending; }else { return NSOrderedSame; } }]; NSLog(@"%@", sortArray2); // ----------------------------------------------------- // 创建4个Person对象 Person *per1 = [Person personWithName:@"yangMi" gender:@"男" age:25 height:1.68]; Person *per2 = [Person personWithName:@"lishishi" gender:@"女" age:30 height:1.66]; Person *per3 = [Person personWithName:@"yangYang" gender:@"男" age:24 height:1.80]; Person *per4 = [Person personWithName:@"sunLi" gender:@"女" age:33 height:1.69]; NSArray *pArr = @[per1, per2, per3, per4]; // 根据姓名排序 NSArray *sortName = [pArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { // 参数obj1 和 obj2 是数组中两个相邻的元素 // id类型是点不出对象的实例变量,所以需要把id类型 的对象转为 Person* 类型的 // 或者将id改为对应的数据类型 Person *p1 = obj1; Person *p2 = obj2; // 前一个人的名字比后一个人的名字大 if ([p1.name compare:p2.name] == NSOrderedDescending) { return NSOrderedDescending; }else if ([p1.name compare:p2.name] == NSOrderedAscending) { return NSOrderedAscending; }else { return NSOrderedSame; } }]; [sortName enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@", obj); }]; NSLog(@"------------"); // 根据年龄排序 NSArray *sortAge = [pArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *p1 = obj1; Person *p2 = obj2; if (p1.age > p2.age) { return NSOrderedDescending; }else if (p1.age < p2.age) { return NSOrderedAscending; }else { return NSOrderedSame; } }]; [sortAge enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@", obj); }]; NSLog(@"------------"); // 根据身高排序 NSArray *sortHeight = [pArr sortedArrayUsingComparator:^NSComparisonResult(Person* obj1, Person* obj2) { if (obj1.height > obj2.height) { return NSOrderedAscending; }else if (obj1.height < obj2.height) { return NSOrderedDescending; }else { return NSOrderedSame; } }]; [sortHeight enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@", obj); }];
转载地址:http://xcuii.baihongyu.com/