2010-05-06 2 views
8

Поэтому у меня есть пользовательский класс Foo, который имеет ряд членов:Сортировка массива Objective-C объектов

@interface Foo : NSObject { 
    NSString *title; 
    BOOL  taken; 
    NSDate *dateCreated; 
} 

И в другом классе у меня есть NSMutableArray, содержащий список этих объектов. Я бы очень хотел отсортировать этот массив на основе свойства dateCreated; Я понимаю, что я мог бы написать свой собственный сортировщик для этого (повторить массив и перестроить в зависимости от даты), но мне было интересно, есть ли соответствующий способ Objective-C для достижения этого?

Какой-то механизм сортировки, где я могу предоставить переменную-член для сортировки, будет отличным.

В C++ я использовал для перегрузки операторы < =>, и это позволило мне сортировать по объектам, но мне смешно, что Objective-C может предложить более приятную альтернативу?

Большое спасибо

+0

В C++ вам нужно только перегрузить '<'. –

+1

Посмотрите на этот вопрос: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – schaechtele

ответ

15

Это довольно просто.

Во-первых, в вашем объекте Foo, создать метод

- (NSComparisonResult) compareWithAnotherFoo:(Foo*) anotherFoo; 

который будет возвращать

[[self dateCreated] compare:[anotherFoo dateCreated]]; 

В конце концов, вызов на массиве

[yourArray sortUsingSelector:@selector(compareWithAnotherFoo:)]; 

Надеюсь, что это помогает, Paul

+0

Хорошее сжатое решение, хотя мне пришлось изменить 'compareWithDate' для' сравнения'. – davbryn

+0

@Pawel Это прекрасно работает, но с символами, так как сортировка немного выключена. (å и ä появляется после a и ö после o). Вы не знаете, как это решить? – Groot

+0

@ Настройте порядок, о котором вы описали, кажется прекрасным, так как å и ä - это только версии букв a с добавленными диакритическими знаками. Каково именно поведение, которое вы ожидаете? – Pawel

Смежные вопросы