Objective-C语法之NSSortDescriptor

main.m

 1 #import <Foundation/Foundation.h>
 2 #import "Person.h"
 3 /**
 4  NSSortDescriptor 可以实现按照对象的属性进行排序;支持多个属性排序。比如我们有个Person对象,它有名字(name)和年龄(age)两个属性,我们需要按Person的age属性(降序)和name属性(升序)来输出Person对象数组信息
 5  */
 6 void testSortDescriptor() {
 7     NSMutableArray *mArrPerson = [[NSMutableArray alloc] initWithCapacity:5];
 8     Person *p = [[Person alloc] initWithName:@"KK" age:23];
 9     [mArrPerson addObject:p];
10     p = [[Person alloc] initWithName:@"Candy" age:22];
11     [mArrPerson addObject:p];
12     p = [[Person alloc] initWithName:@"Wiky" age:27];
13     [mArrPerson addObject:p];
14     p = [[Person alloc] initWithName:@"Stone" age:32];
15     [mArrPerson addObject:p];
16     p = [[Person alloc] initWithName:@"Tom" age:28];
17     [mArrPerson addObject:p];
18     p = [[Person alloc] initWithName:@"Sherlock" age:27];
19     [mArrPerson addObject:p];
20     p = [[Person alloc] initWithName:@"Alex" age:29];
21     [mArrPerson addObject:p];
22     p = [[Person alloc] initWithName:@"Keye" age:28];
23     [mArrPerson addObject:p];
24
25     NSLog(@"按Person的age属性(降序)和name属性(升序)");
26     NSSortDescriptor *sortByAge = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
27     NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
28     [mArrPerson sortUsingDescriptors:@[sortByAge, sortByName]];
29     for (Person *p in mArrPerson) {
30         NSLog(@"age=%ld, name=%@", p.age, p.name);
31     }
32 }
33 int main(int argc, const char * argv[]) {
34     @autoreleasepool {
35         testSortDescriptor();
36     }
37     return 0;
38 }

Person.h

1 #import <Foundation/Foundation.h>
2 @interface Person : NSObject
3 @property (nonatomic, strong) NSString *name;
4 @property (nonatomic, assign) NSInteger age;
5
6 - (id)initWithName:(NSString *)name age:(NSInteger)age;
7 @end

Person.m

 1 #import "Person.h"
 2
 3 @implementation Person
 4 - (id)initWithName:(NSString *)name age:(NSInteger)age {
 5     if (self = [super init]) {
 6         _name = name;
 7         _age = age;
 8     }
 9     return self;
10 }
11 @end

结果:

1 2015-03-28 12:27:13.240 OCNSSortDescriptor[1276:49262] 按Person的age属性(降序)和name属性(升序)
2 2015-03-28 12:27:13.241 OCNSSortDescriptor[1276:49262] age=32, name=Stone
3 2015-03-28 12:27:13.241 OCNSSortDescriptor[1276:49262] age=29, name=Alex
4 2015-03-28 12:27:13.241 OCNSSortDescriptor[1276:49262] age=28, name=Keye
5 2015-03-28 12:27:13.241 OCNSSortDescriptor[1276:49262] age=28, name=Tom
6 2015-03-28 12:27:13.242 OCNSSortDescriptor[1276:49262] age=27, name=Sherlock
7 2015-03-28 12:27:13.242 OCNSSortDescriptor[1276:49262] age=27, name=Wiky
8 2015-03-28 12:27:13.242 OCNSSortDescriptor[1276:49262] age=23, name=KK
9 2015-03-28 12:27:13.242 OCNSSortDescriptor[1276:49262] age=22, name=Candy
时间: 2024-10-11 05:51:13

Objective-C语法之NSSortDescriptor的相关文章

初学Objective - C语法之代码块(block)

一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block的声明:返回值类型(^block变量名)(参数列表) 脱字符(^)是块的语法标记 二.block实现 block变量名 = ^返回值类型(参数列表) 1.  sayHi = ^{ NSLog(@"你好"); }; 2. operateOfValue = ^ NSInteger (NSInt

《黑马程序员》 NSArray和NSMutableArray的使用(Objective - c语法)

------- <a href="http://www.itheima.com" target="blank">Windows Phone 7手机开发</a>.<a href="http://www.itheima.com" target="blank">.Net培训</a>.期待与您交流! ------- 1 NSArray 的使用方法 • Foundation中数组(NSAr

iOS开发——语法篇OC篇&amp;高级语法精讲二

Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和转发.下面通过分析Apple开源的Runtime代码(我使用的版本是objc4-646.tar)来深入理解Objective-C的Runtime机制. Runtime数据结构 在Objective-C中,使用[receiver message]语法并不会马上执行receiver对象的message方

iOS 版本更新摘要(三)iOS 8.x

[What's New in iOS 8.x](https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW1 "What's New in iOS 8.x") ####iOS 8.0 #App Extensions iOS 8.0 提供了 app 扩展点,让你可以在系统的选择区域扩展选择区域.

Pentaho BI server 中 CCC table Component 的使用小技巧

我使用的版本 Pentaho BI Server 5.3.0.0.213 CDE/CDF/CDA/CCC 15.04.16 stable Q: 如何设置表格中各种提示文字的语言(默认为英语)? CDE -> table Component -> Advanced Properties -> oLanguage,编辑该属性,语法需满足 JavaScript Objective 的语法,可以设置的参数如下: { "sProcessing": "Processin

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

Objective - C中属性和点语法的使用

一.属性 属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性 OC中的属性机制提供了便捷的设置和获取实例变量的方式,或者说属性提供了一个默认的设置器和访问器的实现:属性提供的方法是现实可配置的,属性的好处:相当于自己编写这一对方法,属性提供了一系列清晰分明的说明参数来定义设置器和访问器的行为,编译器可以根据你设置的说明参数为你生成相应的方法,减少你的代码量和维护工作量 设置器(sette

iOS开发——语法OC篇&amp;Objective-C新特性的总结

Objective-C新特性的总结 1.nonnull nonnull : 标示当前属性不为空,让外界放心用,只做标示用,即使为空,也木有办法    相当于swift里面的 ! 号 @property (nonnull, nonatomic, strong) NSString *name; 2.nullablenullable : 标示当前属性可能为空,让外界使用时注意    相当于swift里面的 ? 号 @property (nullable, nonatomic, strong) NSSt

Objective - C setter,getter与实例变量的关系, 属性, 点语法

什么时setter,getter, 在OC里, 为实例变量赋zhi的方法称作setter(设置器) 读取实例变量值的方法称作getter(访问器) 我们之前写的那些赋值取值的方法都可以称作setter和getter setter.getter的书写格式 OC里规定里setter和getter的书写格式 如果一个实例变量是 int age: 或者int_age: setter的书写格式如下 - (void)setAge:(int)age;即set+首字母大写的实例变量名(忽略下划线) getter