【问题标题】:iPhone - Sorting of NSMutableArray containing NSDictionary with 2 keysiPhone - 使用 2 个键对包含 NSDictionary 的 NSMutableArray 进行排序
【发布时间】:2012-01-09 19:33:15
【问题描述】:

大家好,

我有一个包含各种 NSDictionary 的 NSMutableArray。在每个 NSDictionary 中,我都有两个键值对,例如:用户名和 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

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

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 方法,想不出办法。

【问题讨论】:

  • loginDate 是字符串还是 NSDate?

标签: iphone sorting nsmutablearray nsdictionary


【解决方案1】:

也许是这样的?

[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: 来获取值。有一些特殊的表示法,比如在键名前加上“@”,更多细节参见Difference valueforKey objectForKey

【讨论】:

  • 感谢您的建议,一定会尝试并再次反馈.. :)
  • 这将使用compare: 选择器对每个键进行排序。如果愿意,您还可以为每个排序描述符指定另一个选择器或使用自定义比较器。
猜你喜欢
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多