【问题标题】:Sort array of objects by their NSDate property [duplicate]按 NSDate 属性对对象数组进行排序[重复]
【发布时间】:2012-10-06 11:23:51
【问题描述】:

可能重复:
How to sort an NSMutableArray with custom objects in it?

如何通过访问对象的 NSDate 属性对对象数组进行排序?

我知道可以在日期数组上使用[mutableArray sortUsingSelector:@selector(compare:)];,但是如何通过访问数组中每个元素的 NSDate 属性、按最早日期到最晚日期对对象进行排序来做到这一点?

【问题讨论】:

    标签: objective-c nsmutablearray nsdate sorting


    【解决方案1】:

    您可以覆盖自定义类中的 compare 方法,以便它比较自定义类的两个对象并根据对象上的日期返回适当的 NSComparisonResult。

    例如:

    -(NSComparisonResult)compare:(YourClass*)otherObject
    {
       return [self.date compare:otherObject.date];
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用:

         NSArray *sortedArray = [mutableArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
              NSDate *first = [(Person*)a birthDate];
              NSDate *second = [(Person*)b birthDate];
              return [first compare:second];
          }];
      

      或者看到这个link

      【讨论】:

        【解决方案3】:
            NSSortDescriptor* sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"nsdatepropertyname" ascending:YES];
            [mutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]];
        

        【讨论】:

        • 为了更简洁,你可以这样写第二行:[mutableArray sortUsingDescriptors:@[sortByDate]];
        • 为了澄清一点(如果需要),sortUsingDescriptors: 返回排序后的NSArray。您可能希望将其分配给另一个变量并从那里获取它,就像在 Helium3's answer 上所做的那样。
        【解决方案4】:

        有一个方法叫做-[NSArray sortedArrayUsingComparator:]。它需要一个块,您可以在其中实现您认为适合您的对象的任何比较。

        【讨论】:

          【解决方案5】:

          感谢所有答案,我遇到了解决我问题的答案。Check NSGod's answer

          感谢用户:NSGod:

          NSSortDescriptor *dateDescriptor = [NSSortDescriptor
                                           sortDescriptorWithKey:@"startDateTime" 
                                                       ascending:YES];
          NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
          NSArray *sortedEventArray = [nodeEventArray
               sortedArrayUsingDescriptors:sortDescriptors];
          

          【讨论】:

            猜你喜欢
            • 2016-11-25
            • 1970-01-01
            • 2014-09-17
            • 2014-08-25
            • 1970-01-01
            • 2017-05-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多