ios – 按密钥中的字符串日期对NSDictionaries的NSArray进行排序?

前端之家收集整理的这篇文章主要介绍了ios – 按密钥中的字符串日期对NSDictionaries的NSArray进行排序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在努力寻找一种简单的方法来对包含NSDictionaries的NSMutableArray进行排序.每个NSDictionary都有一个名为“Date”的键,其中包含一个日期的NSString(例如:2014年10月15日).

我要做的是根据这些字符串按升序对数组进行排序.

我试过这个没有运气:

  1. NSComparisonResult dateSort(NSString *s1,NSString *s2,void *context) {
  2.  
  3. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  4. [formatter setDateFormat:@"MM/dd/yy"];
  5.  
  6. NSDate *d1 = [formatter dateFromString:s1];
  7. NSDate *d2 = [formatter dateFromString:s2];
  8.  
  9. return [d1 compare:d2]; // ascending order
  10. return [d2 compare:d1]; // descending order
  11. }

我也试过这个没有运气:

  1. NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES];
  2. stories=[stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
  3. recent = [stories copy];

每种方式都会导致崩溃,我认为这是因为它是NSString而不是NSDate,但我对如何做到这一点感到茫然.

谁能告诉我正确的方法来实现这一目标?

这就是我调用第一个代码块的方式:

  1. theDictionaries = [[theDictionaries sortedArrayUsingFunction:dateSort context:nil] mutableCopy];

解决方法

你需要在你的词典中找到字符串.看起来你正试图比较字典本身.如果你有一个名为data的数组,你会做这样的事情,
  1. NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  2. [formatter setDateFormat:@"MM/dd/yyyy"];
  3.  
  4. self.data = [self.data sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *obj1,NSDictionary *obj2) {
  5. NSDate *d1 = [formatter dateFromString:obj1[@"date"]];
  6. NSDate *d2 = [formatter dateFromString:obj2[@"date"]];
  7.  
  8. return [d1 compare:d2]; // ascending order
  9. return [d2 compare:d1]; // descending order
  10. }];
  11.  
  12. NSLog(@"%@",self.data);

猜你在找的iOS相关文章