2010-05-06 20 views
8

Więc mam niestandardowej klasy Foo który ma liczbę członków:Sortowanie tablicę objective-c obiektów

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

A w innej klasy Mam NSMutableArray zawierający listę tych obiektów. Bardzo chciałbym posortować tę tablicę na podstawie właściwości dateCreated; Rozumiem, że mógłbym napisać do tego własny sorter (przerabiać tablicę i zmieniać kolejność na podstawie daty), ale zastanawiałem się, czy istnieje odpowiedni sposób na osiągnięcie Celu C?

Jakiś mechanizm sortowania, w którym mogę podać zmienną do sortowania według byłoby świetne.

W C++ użyłem przeciążenia operatorów < => i to pozwoliło mi sortować według obiektu, ale mam zabawne uczucie, że Objective-C może zaoferować ładniejszą alternatywę?

Wielkie dzięki

+0

W C++ wystarczy przeciążyć '<'. –

+1

Spójrz na to pytanie: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – schaechtele

Odpowiedz

15

To całkiem proste.

Po pierwsze, w swoim obiektu Foo, utworzyć metodę

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

która będzie zwracać

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

W końcu, zadzwoń na tablicy

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

Hope this helps, Paul

+0

Ładne, zwięzłe rozwiązanie, chociaż musiałem zmienić "compareWithDate" na "porównaj". – davbryn

+0

@Pawel To działa dobrze, ale ze znakami jak å ä ö sortowanie jest trochę nie tak. (å i ä pojawia się po a i ö po o). Nie wiesz, jak rozwiązać ten problem? – Groot

+0

@Filip, którą opisałeś, wydaje się być w porządku, ponieważ å i ä są tylko wersjami litery a ze znakami diakrytycznymi. Czym dokładnie jest zachowanie, którego można się spodziewać? – Pawel

Powiązane problemy