排序NSMutableArray包含NSDictionary与2个键



大家好,

我有一个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了解更多细节。

最新更新