按照NSDate对字典数组进行排序

5

我有一个字典数组。在每个字典中,都有一个键dateOfInfo(一个NSDate)和其他几个内容。我想按每个字典的dateOfInfo对数组进行排序,并使最新的字典成为第一个结果。

我该怎么做?

3个回答

17

您可以使用NSSortDescription进行排序,例如:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey: @"dateOfInfo" ascending: NO];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];

你还可以使用这个方法

- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context

这几乎是完美的。我使用了你代码的前半部分,但不得不将Ascending更改为NO,而且我不得不使用sortedArrayUsingDescriptors代替sortUsingDescriptors。除此之外,这个方法非常好用。再次感谢你,PengOne! - Baub
@James:很高兴它起作用了。我更新了我的答案以纳入你的修订。 - PengOne
我有一个字典数组,我想按照年龄和银行账号进行排序,但是它根本没有起作用。 - Satish A

1
基本的冒泡排序算法可以使用。在这种情况下,您需要循环遍历数组,在[array objectAtIndex:]上使用valueForKey消息来获取NSDate值。有关比较日期的信息,请参见post。因此,如果您按日期升序排序,只需将具有较低日期(记住冒泡排序比较吗?)的对象添加到一个数组中,该数组将保存您的排序结果。

感谢您提供那篇文章的链接。我正在处理它。 - Baub
第二个答案也更容易使用NSSortDescriptor。但是我的思维方式表明了一件事情,我仍然是一个算法和C语言的人。向我抛出花哨的类仍然不起作用 :) - Bourne
2
NSArray拥有许多强大的内置排序功能,没有必要手动实现。 - jlehr
3
对于给这个回答按下投票的人:按下投票是针对不够有用的回答。希望你知道那句话的意思。这个回答并不是错误或没用的,只是有一种更简单的方法,可以使用NSSortDescriptor。 - Bourne
我能够用这种方式使它工作,但是我用PengOne的代码替换了它,因为它更短更快。不过还是谢谢你! :) - Baub

0

试试这样写:

            NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init];
             [fmtDate setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
             NSComparator compareDates = ^(id string1, id string2)
             {
                 NSDate *date1 = [fmtDate dateFromString:string1];
                 NSDate *date2 = [fmtDate dateFromString:string2];

                 return [date1 compare:date2];
             };
             NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"StartTime" ascending:YES comparator:compareDates];
             [youArray sortUsingDescriptors:@[sortDesc1]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接