将NSMutableArray按每个字符串的一部分排序为日期

时间:2014-06-05 21:46:11

标签: ios objective-c sorting ios7 nsmutablearray

我有一个NSMuableArray,每个字符串包含大量信息(我知道它不是最好的方式,但是它是如何做的)所以每个字符串看起来像

02:00:00-21:00:00-June 3th, 2014-23:00:00-June 3th, 2014||VincentKahn.com||10.00

我想在第一个日期,2014年6月21日 - 2014年6月3日部分(我知道有拼写错误)对其进行排序,我已经看过NSSortDescriptor的例子,但我不是有一个约会,我仍然需要保留所有信息。

我试过拆分它,但是每次循环都是如此,如果我这样做了,我知道我将失去我需要的格式。

最快捷的方式是什么?对此进行排序?

如果它有助于我为TableView

排序

编辑:

我检索保存在打开为可变数组的.plist中的这些字符串

1 个答案:

答案 0 :(得分:0)

复杂的方法,但我最终使用了一个使用块的三重排序系统(我认为这就是名称)按日排序,然后按月排序。

-(void)sortTable {
NSString *Ja = @"January";
NSString *Fe = @"February";
NSString *Ma = @"March";
NSString *Ap = @"April";
NSString *Mar = @"May";
NSString *Ju = @"June";
NSString *Jul = @"July";
NSString *Au = @"August";
NSString *Se = @"September";
NSString *Oc = @"October";
NSString *No = @"November";
NSString *De = @"December";


NSArray *sortedDay = [arrayFromPlist sortedArrayUsingComparator:^NSComparisonResult(id a, id b)
                        {

                            NSString *aString = (NSString*) a;
                            NSString *dateA = [[aString componentsSeparatedByString:@"-"] objectAtIndex:2];
                            NSString *thePreDayA = [[dateA componentsSeparatedByString:@" "] objectAtIndex:1];
                            NSString *almostDayA = [[thePreDayA componentsSeparatedByString:@","] objectAtIndex:0];
                            if  ([almostDayA rangeOfString:@"th"].location != NSNotFound) {
                                NSLog (@"Yes, we have a th at location %i", [almostDayA rangeOfString:@"th"].location );
                                theDayA = [[almostDayA componentsSeparatedByString:@"th"] objectAtIndex:0];
                            } else {
                                theDayA = almostDayA;
                            }
                            int aInt = [theDayA integerValue];
                            NSString *bString = (NSString*) b;
                            NSString *dateB = [[bString componentsSeparatedByString:@"-"] objectAtIndex:2];
                            NSString *thePreDayB = [[dateB componentsSeparatedByString:@" "] objectAtIndex:1];
                            NSString *almostDayB = [[thePreDayB componentsSeparatedByString:@","] objectAtIndex:0];
                            if  ([almostDayB rangeOfString:@"th"].location != NSNotFound) {
                                NSLog (@"Yes, we have a th at location %i", [almostDayB rangeOfString:@"th"].location );
                                theDayB = [[almostDayB componentsSeparatedByString:@"th"] objectAtIndex:0];
                            } else {
                                theDayB = almostDayB;
                            }
                            int bInt = [theDayB integerValue];
                            return aInt > bInt;

                        }];



NSArray *sortedMonths = [sortedDay sortedArrayUsingComparator:^NSComparisonResult (id a, id b)
                          {
                              NSString *aString = (NSString*) a;
                              NSString *dateA = [[aString componentsSeparatedByString:@"-"] objectAtIndex:2];
                              NSString * preMonthA = [[dateA componentsSeparatedByString:@" "] objectAtIndex:0];
                              int aInt;
                              if([preMonthA isEqualToString:Ja]) {
                                  aInt = 1;
                              } else  if([preMonthA isEqualToString:Fe]) {
                                  aInt = 2;
                              } else  if([preMonthA isEqualToString:Mar]) {
                                  aInt = 3;
                              } else  if([preMonthA isEqualToString:Ap]) {
                                  aInt = 4;
                              } else  if([preMonthA isEqualToString:Ma]) {
                                  aInt =  5;
                              } else  if([preMonthA isEqualToString:Ju]) {
                                  aInt =  6;
                              } else  if([preMonthA isEqualToString:Jul]) {
                                  aInt =  7;
                              } else  if([preMonthA isEqualToString:Au]) {
                                  aInt =  8;
                              } else  if([preMonthA isEqualToString:Se]) {
                                  aInt =  9;
                              } else  if([preMonthA isEqualToString:Oc]) {
                                  aInt =  10;
                              } else  if([preMonthA isEqualToString:No]) {
                                  aInt =  11;
                              } else  if([preMonthA isEqualToString:De]) {
                                  aInt =  12;
                              } else {
                                  aInt =  0;
                              }


                              NSString *bString = (NSString*) b;
                              NSString *dateB = [[bString componentsSeparatedByString:@"-"] objectAtIndex:2];
                              NSString *preMonthB = [[dateB componentsSeparatedByString:@" "] objectAtIndex:0];
                              int  bInt;
                              if([ preMonthB isEqualToString:Ja]) {
                                   bInt = 1;
                              } else  if([ preMonthB isEqualToString:Fe]) {
                                   bInt = 2;
                              } else  if([ preMonthB isEqualToString:Mar]) {
                                   bInt = 3;
                              } else  if([ preMonthB isEqualToString:Ap]) {
                                   bInt = 4;
                              } else  if([ preMonthB isEqualToString:Ma]) {
                                   bInt =  5;
                              } else  if([ preMonthB isEqualToString:Ju]) {
                                   bInt =  6;
                              } else  if([ preMonthB isEqualToString:Jul]) {
                                   bInt =  7;
                              } else  if([ preMonthB isEqualToString:Au]) {
                                   bInt =  8;
                              } else  if([ preMonthB isEqualToString:Se]) {
                                   bInt =  9;
                              } else  if([ preMonthB isEqualToString:Oc]) {
                                   bInt =  10;
                              } else  if([ preMonthB isEqualToString:No]) {
                                   bInt =  11;
                              } else  if([ preMonthB isEqualToString:De]) {
                                   bInt =  12;
                              } else {
                                   bInt =  0;
                              }

                              return aInt > bInt;




                          }];
NSArray *sortedYear = [sortedMonths sortedArrayUsingComparator:^NSComparisonResult(id a, id b)
                       {

                           NSString *aString = (NSString*) a;
                           NSString *dateA = [[aString componentsSeparatedByString:@"-"] objectAtIndex:2];
                           int aInt = [[[dateA componentsSeparatedByString:@" "] objectAtIndex:2] integerValue];

                           NSString *bString = (NSString*) b;
                           NSString *dateB = [[bString componentsSeparatedByString:@"-"] objectAtIndex:2];
                           int bInt = [[[dateB componentsSeparatedByString:@" "] objectAtIndex:2] integerValue];


                           return aInt > bInt;
                       }];

NSLog(@"SORTED ARRRAYYYYYYYY: %@", sortedYear);





}