【问题标题】:Sort NSMutableDictionary keys by Value of type NSDate按 NSDate 类型的值对 NSMutableDictionary 键进行排序
【发布时间】:2015-12-14 06:25:52
【问题描述】:

我有一个名为 LogDateMsg 的 NSMutableDictionary。在这本字典中,我将 NSDate 对象存储为键为 long 类型的值。

我需要根据键的日期值按降序对键进行排序。我正在使用下面的代码

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"d.M.yyyy kk:mm:ss"];
NSArray *currKeys = [LogDateMsg keysSortedByValueUsingComparator:^NSComparisonResult(id a, id b) {
    NSString* first = (NSString*)a;
    NSString* second = (NSString*)b;
    NSDate* d1=[formatter dateFromString:first];
    NSDate* d2=[formatter dateFromString:second];
    return [d2 compare:d1];
}];

但是,以上并没有给我所需的结果。

上面的代码有问题还是有更好的方法来执行我想要的?

提前致谢!

【问题讨论】:

  • @ShamasS,我已经看到了那个答案,但我的问题不同。这是我正在尝试排序的 NSMutableDictionary。
  • 您能否显示一个您作为键的示例日期字符串。此外,您不能将长值直接存储在字典中,因为字典只能保存对象。 Long 是一种原始类型。您必须先将其包装为 NSNumber 才能使其成为对象。
  • @paranoidcoder,我的示例键是这样的:Before sort currKeys:( 1189641421, 1350490027, 1102520059, 1681692777, 1649760492, 1967513926, 1714636915, 1957747793, 1804289383, 2044897763 )
  • @paranoidcoder,值为:before sort currvalues:( "Mon Dec 14 11:34:15 2015", "Mon Dec 14 11:34:15 2015", "Mon Dec 14 11:34:14 2015", "Mon Dec 14 11:34:14 2015", "Mon Dec 14 11:34:16 2015", "Mon Dec 14 11:34:16 2015", "Mon Dec 14 11:34:14 2015", "Mon Dec 14 11:34:15 2015", "Mon Dec 14 11:34:14 2015", "Mon Dec 14 11:34:15 2015" )

标签: ios objective-c nsmutabledictionary


【解决方案1】:
NSArray *keys = @[@1189641421, @1350490027, @1102520059, @1681692777];
NSArray *values =  @[@"Mon Dec 14 11:34:10 2015", @"Mon Dec 14 11:34:11 2015", @"Mon Dec 14 11:34:12 2015", @"Mon Dec 14 11:34:13 2015"];
NSMutableDictionary *d = [[NSMutableDictionary alloc] initWithObjects:values forKeys:keys];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"EEE MMM dd hh:mm:ss yyyy"];
currKeys = [d keysSortedByValueUsingComparator:^NSComparisonResult(id a, id b) {
    NSDate *d1 =[formatter dateFromString:(NSString*)a];
    NSDate *d2 =[formatter dateFromString:(NSString*)b];
    return [d2 compare:d1];
}];

NSLog_SM(@"%@", currKeys);

【讨论】:

  • 在 cmets 中没有给出理由的情况下不投反对票应该是一项政策,否则我们应该如何了解我们做错了什么。我们可以保持匿名,但必须提供原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多