NSSortDescriptor:Array,Set和Core Data中排序的实现
来源:互联网 发布:西咸新区大数据交易所 编辑:程序博客网 时间:2024/04/30 13:47
NSSortDescriptor 是重要的排序类, 可以非常方便滴对一些集合类进行排序, 在core data中使用也非常的广泛.
初始化方法
+ (instancetype)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending NS_AVAILABLE(10_6, 4_0);+ (instancetype)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector NS_AVAILABLE(10_6, 4_0);<pre name="code" class="objc">+ (instancetype)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr NS_AVAILABLE(10_6, 4_0);- (instancetype)initWithKey:(NSString *)key ascending:(BOOL)ascending;- (instancetype)initWithKey:(NSString *)key ascending:(BOOL)ascending selector:(SEL)selector;
- (instancetype)initWithKey:(NSString *)key ascending:(BOOL)ascending comparator:(NSComparator)cmptr NS_AVAILABLE(10_6, 4_0);三个参数是:
Key: 排序的key 或者 keyPath
ascending: YES 升序 NO 降序
比较参数: selector 或者 NSComparator
selector 的例子 说明: selector指定了一个key属性的类型实现的方法,传进来一个值和本身(self)对比,返回一个NSComparisonResult结果
- (NSComparisonResult)localizedCompare:(NSString *)aString
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2)是个block , 传入两个对象, 返回一个NSComparisonResult结果
例子,有一个书类,有三个属性
@interface Book : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, copy) NSString *author;@property (nonatomic, assign) float price;@end初始化数据
Book *book = [[Book alloc] init]; [book setValue:@"iOS开发" forKey:@"name"]; [book setValue:@"张三" forKey:@"author"]; [book setValue:@99.0 forKey:@"price"]; Book *book2 = [[Book alloc] init]; [book2 setValue:@"Android开发" forKey:@"name"]; [book2 setValue:@"李四" forKey:@"author"]; [book2 setValue:@79.0 forKey:@"price"]; Book *book3 = [[Book alloc] init]; [book3 setValue:@"PHP开发" forKey:@"name"]; [book3 setValue:@"王五" forKey:@"author"]; [book3 setValue:@59.0 forKey:@"price"]; Book *book4 = [[Book alloc] init]; [book4 setValue:@"HTML开发" forKey:@"name"]; [book4 setValue:@"赵六" forKey:@"author"]; [book4 setValue:@99.0 forKey:@"price"]; _bookArray = @[book, book2, book3, book4];排序
//价格降序排列: 规则就是---是否降序 加上 comparator比较返回的结果和比较的值是一致的 的与否 === 确定最后是降序还是升序 //降序的时候: 后面如果obj1 > obj2 就返回 NSOrderedDescending 降序 //降序的时候: 后面如果obj1 > obj2 就返回 NSOrderedAscending 升序 //升序的时候: 后面如果obj1 > obj2 就返回 NSOrderedAscending 升序 //升序的时候: 后面如果obj1 > obj2 就返回 NSOrderedDescending 降序 NSSortDescriptor *priceSort = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) { float value1 = [obj1 floatValue]; float value2 = [obj2 floatValue]; if (value1 == value2) { return NSOrderedSame; } else if (value1 > value2) { //value1比value2大则 return NSOrderedDescending; } else { return NSOrderedAscending; } }]; //书名升序排列 NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedStandardCompare:)]; //两者组合,共同组成排序的结果 NSArray *newArray = [_bookArray sortedArrayUsingDescriptors:@[priceSort,nameSort]]; NSLog(@"_bookArray = %@",newArray); //book4, book, book2, book3
0 0
- NSSortDescriptor:Array,Set和Core Data中排序的实现
- NSSortDescriptor的使用---排序
- IOS-NSSortDescriptor的使用---排序
- NSSortDescriptor 的使用-------快速排序
- NSSortDescriptor排序
- NSSortDescriptor排序
- Core Data的代码实现
- java中List,array和set的转换
- Java中array、Set、List和Map的比较总结
- 002_你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中
- NSSortDescriptor和NSPredicate的使用总结
- CORE DATA 中遇到的一些问题
- OC中对Core Data的操作
- iOS中Core Data的使用
- Core Java (二十五) List与Array的相互转化,Set与Array的相互转换
- NSSortDescriptor(数组排序)
- NSSortDescriptor(数组排序)
- NSSortDescriptor(数组排序)
- 17230 计算轴承半径[C]
- Sqlite SQL格式化输入函数splite3_mprintf
- I2C总线
- 紫外线消毒器:紫外线杀菌消毒装置的技术要求详解
- Java虚拟机学习 - 体系结构 内存模型
- NSSortDescriptor:Array,Set和Core Data中排序的实现
- 走马观花: Linux 系统调用 open 七日游(一)
- WIFI基本知识整理
- 亿级Web系统搭建——单机到分布式集群
- 微信支付奇葩问题 system:access_denied
- Fdora 系列 USB 启动装系统时:缺少ISO 9660 镜像 解决办法
- insmod: error inserting 'hello.ko': -1 Operation not permitted
- 【每日一悟】放手才轻松
- Eclipse中自动生成类的注释