2012-10-16 24 views
21

Powiel możliwe:
How to sort an NSMutableArray with custom objects in it?Sortuj tablicę obiektów przez ich NSDate własności

jaki sposób jeden rodzaj tablicę obiektów poprzez dostęp do ich właściwości NSDate?

Wiem, że można użyć [mutableArray sortUsingSelector:@selector(compare:)]; na tablicy dat, ale jak to zrobić, uzyskując dostęp do właściwości NSDate na każdym elemencie w tablicy, sortując obiekty według najwcześniejszej daty do ostatniej daty?

Odpowiedz

31

Dziękuję za wszystkie odpowiedzi, natknąłem się na tę odpowiedź, która rozwiązała mój problem. Check NSGod's answer

Oto Kodeksu dzięki użytkownikowi: NSGod:

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
           sortDescriptorWithKey:@"startDateTime" 
              ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
NSArray *sortedEventArray = [nodeEventArray 
    sortedArrayUsingDescriptors:sortDescriptors]; 
0

Możesz zastąpić metodę porównywania w swojej klasie niestandardowej, aby porównywać dwa obiekty Twojej klasy niestandardowej i zwracać odpowiednie wartości NSComparisonResult zgodnie z datami obiektów.

Np

-(NSComparisonResult)compare:(YourClass*)otherObject 
{ 
    return [self.date compare:otherObject.date]; 
} 
8

Można użyć:

NSArray *sortedArray = [mutableArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSDate *first = [(Person*)a birthDate]; 
     NSDate *second = [(Person*)b birthDate]; 
     return [first compare:second]; 
    }]; 

Albo zobaczyć ten link

12
NSSortDescriptor* sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"nsdatepropertyname" ascending:YES]; 
    [mutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]]; 
+2

Aby uczynić go nieco bardziej zwięzłe, można napisać drugą linię: '[sortUsingDescriptors mutableArray: @ [sortByDate]];' –

+2

Aby wyjaśnić nieco więcej (w razie potrzeby), 'sortUsingDescriptors:' zwraca posortowane 'NSArray'. Prawdopodobnie będziesz chciał przypisać ją do innej zmiennej i zabrać ją stamtąd, jak to zrobiono w [Odpowiedź Helium3] (http://stackoverflow.com/a/12913805/2192331). –

0

Jest to metoda zwana -[NSArray sortedArrayUsingComparator:]. Zajmuje blok, w którym możesz zaimplementować dowolne porównanie, które uważasz za odpowiednie dla twoich obiektów.

Powiązane problemy