Сравнение 3 массивов различных подклассов NSObject - PullRequest
2 голосов
/ 26 августа 2011

У меня есть NSDictionary, который содержит 3 NSArrays,

- posts
- comments
- likes.

И в каждом массиве есть соответствующие подклассы NSObject:

- Post
- Comment
- Like

Обычно я просто помещаю все объекты из этих трех массивов в один массив и сравниваю их, используя одну и ту же переменную, которую они все содержат, но в этом случае Posts имеет переменные dateOfUpload и Like и Comment имеют одинаковую переменную date.

Как я могу сравнить объекты из этих трех массивов, используя переменные date и dateOfUpload, чтобы создать один большой массив всех объектов в нисходящую дату?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Я бы заставил их всех реализовать метод, подобный следующему:

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

Конечно, вам нужно реализовать это по-разному в каждом классе.Затем сделайте один большой массив из всех массивов деревьев и вызовите

[myArray sortUsingSelector:@selector(compareByDate:)];
1 голос
/ 27 августа 2011

Еще один способ сделать это - добавить все ваши объекты в один большой массив и отсортировать его по следующему блоку:

// 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
}];
...