2011-08-26 45 views
2

我有一个NSDictionary包含3个NSArrays,比较不同NSObject的子类的3个阵列

- posts 
- comments 
- likes. 

而且每个阵列中是一致的NSObject的子类:

- Post 
- Comment 
- Like 

通常情况下,我只想把所有的对象从这三个数组转换为一个数组,并使用它们都包含的相同变量进行比较,但在这种情况下,Posts的变量为dateOfUpload,而LikeComment具有相同的变量日期。

如何比较这三个数组中的对象,使用变量datedateOfUpload在下降日期创建所有对象的大数组?

回答

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 
}]; 
2

我会让他们都实现类似方法:

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

当然,你需要在每个类不同的方式来实现这一点。 然后从所有的树阵使一个大阵列,并呼吁

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