Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-包含NSDictionary和2个键的NSMutableArray排序_Iphone_Sorting_Nsmutablearray_Nsdictionary - Fatal编程技术网

iPhone-包含NSDictionary和2个键的NSMutableArray排序

iPhone-包含NSDictionary和2个键的NSMutableArray排序,iphone,sorting,nsmutablearray,nsdictionary,Iphone,Sorting,Nsmutablearray,Nsdictionary,大家好 我有一个NSMutableArray,其中包含各种NSDictionary。在每个NSDictionary中,我有两个键值对,例如:username和loginDate 我需要根据loginDate降序和username升序对NSMutableArray中的所有NSDictionary进行排序 我只想更详细地说明一下: NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011

大家好

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

我需要根据loginDate降序和username升序对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
排序后,数组中的结果应为:

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]];
如果您为iOS 4或更高版本构建,您甚至可以:

[array sortUsingDescriptors:
 [NSArray arrayWithObjects:
  [NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO],
  [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES],
  nil]];

这使用
compare:
方法来比较属性键值,即
valueForKey:
返回的值。在
NSDictionary
的情况下,它或多或少只需调用
objectForKey:
即可获得值。有一些特殊的标记,如在键名前加“@”,请参阅以了解更多详细信息。

loginDate是字符串还是NSDate?感谢您的建议,我们一定会尝试并再次反馈。)这将使用每个键的
compare:
选择器进行排序。如果愿意,还可以为每个排序描述符指定另一个选择器或使用自定义比较器。