按日期排序:带有日期对象的NSArray的NSArray

时间:2011-08-10 02:41:17

标签: iphone objective-c sorting nsarray nsdate

我有一个简单的NSArray,它有一些数组作为对象,有一些日期和字符串作为对象:

  • NSArray(主阵列)--------------->表视图
    • NSArray(二级阵列)--->表格视图单元格
      • NSDate -------------------->表视图单元格文本标签
      • NSString ------------------->表视图单元格详细文本标签

我将主数组用于我的表视图 - >每个细胞都有自己的'二级阵列'。 现在我想通过NSDate对象对主数组进行排序。这听起来很容易,但我在网上找不到任何解决方案。

我考虑使用NSSortDesriptors,但那些只是按主数组中的对象排序数组,而不是在辅助数组中。

希望你能帮助我

编辑:如果我使用NSDictionary作为辅助数组会解决问题吗?

2 个答案:

答案 0 :(得分:4)

如果您的应用针对iOS 4.0或更高版本,您应该可以使用NSArray sortedArrayUsingComparator:

NSArray *sortedArray = [mainArray sortedArrayUsingComparator: ^(id obj1, id obj2) {
    return [[obj1 objectAtIndex:0] compare:[obj2 objectAtIndex:0]];
}];

这假设日期字段始终位于内部数组的索引0中。如果您使用字典并按名称键入日期字段,它可能会更清晰,但如果您对始终保留在索引0中的日期字段感到满意,则上述情况应该有效。

答案 1 :(得分:1)

假设我已正确理解您的数据结构,这应该是关闭的:

NSArray *sortedArray = [mainArray sortedArrayUsingComparator:^(id ary1, id ary2) {
    NSArray *array1 = (NSArray *)ary1;
    NSArray *array2 = (NSArray *)ary2;
    NSDate *date1 = (NSDate *)[array1 objectAtIndex:0];
    NSDate *date2 = (NSDate *)[array2 objectAtIndex:0];
    return [date1 compare:date2];
}];