我有一个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中的这些字符串
答案 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);
}