美文网首页
Objective-C相关

Objective-C相关

作者: wpf_register | 来源:发表于2017-10-07 14:45 被阅读13次

重温OC,发现好些之前忽视的小细节,简单的梳理一下。

NSSet

NSSet相关

NSArray

  • 基础数据类型可以直接用系统的compare
 NSMutableArray *array=[NSMutableArray arrayWithCapacity:2];
 [array addObject:@"xiaoming"];
 [array addObject:@"xiaohong"];
 [array addObject:@"xiaozhang"];
 [array addObject:@"xiaofang"];
 [array addObject:@"xiaocui"];
 [array sortUsingSelector:@selector(compare:)];
  • 非基础数据类型有多种排序方法
  NSMutableArray *bookArray=[NSMutableArray array];
  Book *book1=[Book bookWithName:@"chinese" price:19];
  Book *book2=[Book bookWithName:@"math" price:16];
  Book *book3=[Book bookWithName:@"english" price:15];
  [bookArray addObject:book1];
  [bookArray addObject:book2];
  [bookArray addObject:book3];

1.block排序

 [bookArray sortUsingComparator:^NSComparisonResult(Book* obj1, Book*  obj2) {
            
            if (obj1.price < obj2.price) {
                return NSOrderedAscending;
            }else if (obj1.price > obj2.price) {
                return NSOrderedDescending;
            }else{
                return NSOrderedSame;
            }
            
        }];

2. SEL排序

[bookArray sortUsingSelector:@selector(compare:)];

3. 描述排序

NSSortDescriptor *descriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
NSSortDescriptor *descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO];
[bookArray sortUsingDescriptors:@[descriptor1,descriptor2]];
  • 快速遍历

用block遍历对大数据会比较有优势

[bookArray enumerateObjectsUsingBlock:^(Book*  obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"%ld--%@",obj.price,obj.name);
        }];

//同时block每执行一次后,
//会判断idx相对于当前数组是否越界
//越界则不招待,否则执行

//所以删除时可以考虑反向遍历
[bookArray enumerateObjectsWithOptions:NSEnumerationReverse
                                    usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

                                        [bookArray removeObject:obj];
                                        NSLog(@"idx---%ld",idx);
                                        NSLog(@"count---%ld",bookArray.count);

                                    }];

检索判断
检测判断,返回第一个符合条件的数据索引或返加符合条件的数据索引集合

 NSUInteger pass = [bookArray indexOfObjectPassingTest:^BOOL(Book *obj, NSUInteger idx, BOOL * _Nonnull stop) {
                   if (obj.price > 25) {
                       return YES;
                   }else{
                       return NO;
                   }
                   
               }];
        if (pass == NSNotFound) {
            NSLog(@"notFound");
        }
        
NSIndexSet *testSet =  [bookArray indexesOfObjectsPassingTest:^BOOL(Book* obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
                if (obj.price> 15) {
                    return YES;
                }else{
                    return NO;
                }
              }];
        
        NSLog(@"%ld",testSet.count);
        [testSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"======%lu",idx);
        }];

相关文章

网友评论

      本文标题:Objective-C相关

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