2012-12-02 15 views
5

NSMutableArray öğesinde tarih dizelerini sıralama konusunda küçük bir çalışma yapıyorum, diziyi sqlite db'den alıyorum. Eğer buNSMutableArray öğesinin tarihi nasıl sıralanır

tarih dizeleri gibi gösteriyor diziyi yazdırırsanız vardır ( "2011-05-01", "2011-02-01", "2012-01-08", "2012- 05-08" , "2010-01-09 )

Ben küçükten büyüğe tarihleri ​​göstermek istiyorum. .. ben objc için acemi olduğum ..... adamlar bana yardım edin

cevap

22

Öncelikle tüm tarih dizelerini (NSString olan) NSDate nesnesine dönüştürmeli ve sonra bunları sırayla dateObjects .

Tüm bu dizeleri içeren dateArray olduğuna inanıyorum.

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

VEYA

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

Sorusunda gösterdiği tarih biçimi dizeler halinde bile doğru şekilde sıralanacaktır. –

+0

Bu gereksizdir, dizeleri şimdi olduğu gibi ayarlayabilir. – TheAmateurProgrammer

+0

Eğer mümkünse kodu tercih edebilir misiniz? – Joker

5

Tarihlerinizin formatında YYYY-mm-dd gerçekten dizeleri, sorunuzun olduğu gibi, o zaman bu artan düzende sıralamak olacaktır:

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

O Ayrıca tarihleriniz aslında NSDate nesneleri ise çalışır.

Eğer dizinin bir sıralanmış kopyasını oluşturmak istiyorsanız:

genel olarak veritabanı tarafından, imo, yapılmalıdır Sıralama
NSArray *sortedArray = [arrayOfDates sortedArrayUsingSelector:@selector(compare:)];