【问题标题】:Sorting array by sub object property of a custom object?按自定义对象的子对象属性对数组进行排序?
【发布时间】:2014-06-26 05:36:43
【问题描述】:

我有一组自定义对象,PNMessage objectsPNMessage 对象有一个属性是另一个名为PNDate 的对象,PNDate 有一个名为date 的属性,我想按PNDate 的日期属性对我的数组进行排序。

我想我可能可以使用排序描述符,但我不知道如何深入到属性对象 PNDate,然后按 PNDate 日期属性排序。

这是一个表示:

myArray - 我的数组 PNMessage - 我的数组中的自定义对象。 PNDate - 主要自定义对象的属性(也是一个对象)。 date - 这是我要用于对数组进行排序的属性。

这可能吗?

这是我尝试过的,但我知道这是错误的,我似乎无法理解如何深入研究该属性以对数组进行排序:

 NSSortDescriptor *dateDescriptor = [NSSortDescriptor
                                                    sortDescriptorWithKey:@"date"
                                                    ascending:YES];
                NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
                NSArray *sortedEventArray = [self.chatHistory
                                             sortedArrayUsingDescriptors:sortDescriptors];

任何帮助将不胜感激!

【问题讨论】:

    标签: objective-c nsarray nssortdescriptor pubnub


    【解决方案1】:

    您可以使用比较器块,而不是使用排序描述符。

    NSArray *sortedEventArray =
    [self.chatHistory sortedArrayUsingComparator:^NSComparisonResult(PNMessage *m1, PNMessage *m2) {
        return [m1.date compare:m2.date];
    }];
    

    请注意,PNDate 类必须有一个名为 -[PNDate compare:] 的实例方法,该方法返回 NSComparisonResult 才能正常工作。

    【讨论】:

    • 谢谢,这可能就是我要找的。能否麻烦您提供一个可以添加到 PNDate 实现文件中的 compareTo 方法示例?
    • PNDate 是否包装了NSDate 对象?如果是这样,它可以简单地调用-[NSDate compare:]
    • 不,实际上,PNDate 继承自 NSObject。
    • 在不知道该类有哪些可用数据的情况下很难举出一个例子。有一个NSComparator in the Foundation Data Types Reference 的例子。
    • NSDate 比较方法确实有效,我接受了你的回答,我给你投了赞成票,因为你花了额外的时间来提供帮助!
    猜你喜欢
    • 2011-02-16
    • 2016-02-08
    相关资源
    最近更新 更多