比较各种NSObject子类的3个数组

时间:2011-08-26 16:50:09

标签: objective-c nsarray compare nsdictionary

我有一个包含3个NSArrays的NSDictionary,

- posts
- comments
- likes.

在每个数组中都是一致的NSObject子类:

- Post
- Comment
- Like

通常,我只是将这三个数组中的所有对象放入一个数组中,并使用它们都包含的相同变量进行比较,但在这种情况下,Posts具有变量dateOfUpload和{ {1}}和Like具有相同的变量date。

如何使用变量Commentdate比较这三个数组中的对象,以降序日期创建所有对象的一个​​大数组?

2 个答案:

答案 0 :(得分:2)

我会让它们全部实现方法如:

-(NSComparsionResult) compareByDate : (NSObject *) obj;

当然,您需要在每个班级以不同的方式实现这一点。 然后从所有树阵列中创建一个大数组并调用

[myArray sortUsingSelector:@selector(compareByDate:)];

答案 1 :(得分:1)

另一种方法是将所有对象添加到一个大数组中,并使用块进行排序,如下所示:

// Create the array with all the objects
NSMutableArray *stuff = [NSMutableArray arrayWithArray:posts.allValues];
[stuff addObjectsFromArray:comments.allValues];
[stuff addObjectsFromArray:likes.allValues];

// Sort it by using a block
NSArray *sortedStuff = [stuff sortedArrayUsingComparator:^(id obj1, id obj2) {
    NSDate *date1 = [obj1 respondsToSelector:@selector(date)]? [obj1 date] : [obj1 dateOfUpload];
    NSDate *date2 = [obj2 respondsToSelector:@selector(date)]? [obj2 date] : [obj2 dateOfUpload];
    return [date2 compare:date1]; // Objects are reversed to get descending order
}];