2012-12-02 17 views
5

Robię kilka drobnych prac nad sortowaniem ciągów daty w NSMutableArray, otrzymuję tablicę z dblite db. Jeśli wydrukować tablicę to pokazano jak tegoJak sortować NSMutableArray obiektów daty

łańcuchach daty są ( "2011-05-01", "2011-02-01", "2012-01-08", „2012- 05-08" , „2010-01-09 )

chcę pokazać daty w porządku rosnącym. Proszę mi pomóc faceci ..... Jestem newbie do objc ..

Odpowiedz

22

Najpierw należy przekonwertować wszystkie ciągi dat (które są NSString) na obiekty NSDate, a następnie posortować te dateObjects .

Wierzę, że masz dateArray zawierający wszystkie te ciągi.

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" 
                  ascending:NO]; 
NSArray *descriptors = [NSArray arrayWithObject:descriptor]; 
NSArray *reverseOrder = [dateArray sortedArrayUsingDescriptors:descriptors]; 

LUB

NSArray *reverseOrderUsingComparator = [dateArray sortedArrayUsingComparator: 
             ^(id obj1, id obj2) { 
              return [obj2 compare:obj1]; 
             }]; 
+0

Format daty, który pokazał w swoim pytaniu, posortuje się poprawnie, nawet jako ciągi. –

+0

To niepotrzebne, może po prostu ułożyć struny tak, jak są teraz. – TheAmateurProgrammer

+0

Czy mógłbyś preferować kod, jeśli to możliwe ... – Joker

5

Jeśli daty są naprawdę ciągi w formacie YYYY-mm-dd, jak w swoim pytaniu, to będzie je posortować w kolejności rosnącej:

[arrayOfDates sortUsingSelector:@selector(compare:)]; 

Że będzie również działać, jeśli twoje daty są w rzeczywistości obiektami NSDate.

Jeśli chcesz utworzyć posortowanych kopii tablicy:

NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)]; 
1

Sortowanie należy zrobić, imo, przez bazę danych, w ogóle. sqlite3 obsługuje order by.