iPhone - 使用2个键对包含NSDictionary的NSMutableArray进行排序

joe*_*irk 6 sorting iphone nsdictionary nsmutablearray

嗨所有,

我有一个NSMutableArray包含各种NSDictionary.在每个NSDictionary中,我有两个键值对,例如:username和loginDate.

我需要根据loginDate降序和用户名升序对此NSMutableArray中的所有NSDictionary进行排序.

只是为了更详细地说明:

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
Run Code Online (Sandbox Code Playgroud)

排序后,数组中的结果应为:

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
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?经历了一些sortUsingComparator方法,无法想出办法.

Mat*_*man 6

也许是这样的?

[array sortUsingDescriptors:
 [NSArray arrayWithObjects:
  [[[NSSortDescriptor alloc]
    initWithKey:@"loginDate"
    ascending:NO]
   autorelease],
  [[[NSSortDescriptor alloc]
    initWithKey:@"username"
    ascending:YES]
   autorelease],
  nil]];
Run Code Online (Sandbox Code Playgroud)

如果您为iOS 4或更高版本构建,您甚至可以:

[array sortUsingDescriptors:
 [NSArray arrayWithObjects:
  [NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO],
  [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES],
  nil]];
Run Code Online (Sandbox Code Playgroud)

这可以使用该compare:方法比较属性键值,即返回的值valueForKey:.在NSDictionary它的情况下,它或多或少只是调用objectForKey:来获取值.有一些特殊符号,例如使用"@"作为键名前缀,有关更多详细信息,请参阅差值valueforKey objectForKey.