2010-05-06 1 views
8

Così ho una classe personalizzata Foo che ha un numero di membri:Ordinamento di un array di oggetti Objective-C

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

E in un'altra classe ho un NSMutableArray contenente un elenco di questi oggetti. Mi piacerebbe molto ordinare questo array in base alla proprietà dateCreated; Capisco che potrei scrivere il mio sorter per questo (iterare la matrice e riorganizzare in base alla data), ma mi stavo chiedendo se ci fosse un vero modo Objective-C per raggiungere questo obiettivo?

Una sorta di meccanismo di ordinamento in cui è possibile fornire la variabile membro da ordinare sarebbe ottima.

In C++ ho usato per sovraccaricare gli operatori < => e questo mi ha permesso di ordinare per oggetto, ma ho una sensazione strana che Objective-C potrebbe offrire un'alternativa migliore?

Molte grazie

+0

In C++, è necessario solo sovraccaricare '<'. –

+1

Dai un'occhiata a questa domanda: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – schaechtele

risposta

15

Questo è abbastanza semplice da fare.

In primo luogo, nel vostro oggetto Foo, creare un metodo

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

che restituirà

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

Alla fine, invocano la matrice

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

Spero che questo aiuti, Paul

+0

Bella soluzione concisa, anche se ho dovuto cambiare 'compareWithDate' per' compare'. – davbryn

+0

@Pawel Funziona bene ma con i caratteri come å ä ö l'ordinamento è un po 'spento. (å e ä appare dopo a e ö dopo o). Non sai come risolvere questo? – Groot

+0

@Filip l'ordine che hai descritto sembra andare bene come å e ä sono solo versioni della lettera a con segni diacritici aggiunti. Qual è esattamente il comportamento che ti aspetteresti? – Pawel