大家好,
我有一个NSMutableArray包含各种NSDictionary。在每个NSDictionary中,我有两个键值对,例如:username和loginDate。
我需要排序所有NSDictionary在这个NSMutableArray基于loginDate降序和用户名升序。
只是为了更详细地说明:
NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user2", loginDate:15 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user4", loginDate:28 Dec 2011
排序后,数组中的结果应该是:
NSMutableArray (index 0): NSDictionary -> username:"user3", loginDate:28 Dec 2011
NSMutableArray (index 1): NSDictionary -> username:"user4", loginDate:28 Dec 2011
NSMutableArray (index 2): NSDictionary -> username:"user1", loginDate:20 Dec 2011
NSMutableArray (index 3): NSDictionary -> username:"user2", loginDate:15 Dec 2011
我怎样才能做到这一点?我学过一些sortUsingComparator方法,找不到这个的方法。
也许是这样的?
[array sortUsingDescriptors:
[NSArray arrayWithObjects:
[[[NSSortDescriptor alloc]
initWithKey:@"loginDate"
ascending:NO]
autorelease],
[[[NSSortDescriptor alloc]
initWithKey:@"username"
ascending:YES]
autorelease],
nil]];
如果你为ios4或更高版本构建,你甚至可以这样做:
[array sortUsingDescriptors:
[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES],
nil]];
使用compare:
方法比较属性键值,即valueForKey:
返回的值。在NSDictionary
的情况下,它将或多或少地调用objectForKey:
来获得值。有一些特殊的符号,如前缀键名"@",参见Difference valueforKey objectForKey了解更多细节。