我有一个类似
的数组<__NSArrayI 0xa8434a0>(
{
From = "10:01AM";
Title = Discuss;
To = "12:00AM";
},
{
From = "12:01AM";
Title = Discuss;
To = "02:00AM";
},
{
From = "5:01AM";
Title = Available;
To = "7:00AM";
},
{
From = "2:01AM";
Title = Discuss;
To = "5:00AM";
},
{
From = "7:01AM";
Title = Available;
To = "12:00pM";
}
)
如何使用From&amp; amp;来按时间范围对此数组进行排序关键?
我尝试了如下:
但不太好
sortedDatesArray = [[unsortedDatesArray sortedArrayUsingComparator: ^(id a, id b) {
NSDate *d1 = [NSDate dateWithString: s1];
NSDate *d2 = [NSDate dateWithString: s2];
return [d1 compare: d2];
}];
帮我解决这个问题。
答案 0 :(得分:1)
NSArray *toSortArray = nil; /*The array you want to sort*/
NSArray *sortedArray = nil;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mma"];
NSSortDescriptor *descriptorTo = [NSSortDescriptor sortDescriptorWithKey:@"To" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
NSDate *firstDate = [formatter dateFromString:obj1];
NSDate *secondDate = [formatter dateFromString:obj2];
return [firstDate compare:secondDate];
}];
NSSortDescriptor *descriptorFrom = [NSSortDescriptor sortDescriptorWithKey:@"From" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
NSDate *firstDate = [formatter dateFromString:obj1];
NSDate *secondDate = [formatter dateFromString:obj2];
return [firstDate compare:secondDate];
}];
sortedArray = [toSortArray sortedArrayUsingDescriptors:@[descriptorFrom, descriptorTo]];
我希望这能回答你的问题。 :)
答案 1 :(得分:0)
试试这个:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mma"];
[times sortUsingComparator:^NSComparisonResult(NSString* obj1, NSString *obj2) {
NSDate *firstDate = [formatter dateFromString:obj1];
NSDate *secondDate = [formatter dateFromString:obj2];
return [firstDate compare:secondDate];
}];
答案 2 :(得分:-1)
我尝试使用您的代码,请尝试以下代码。我从你的阵列改变了字段。或者您可以更改日期格式。
NSMutableArray *timesArr = [[NSMutableArray alloc] initWithObjects:@"05:00 AM",@"08:00 AM",@"10:00 AM",@"05:01 AM" ,@"7:59 AM",@"12:00 AM", nil];
NSDateFormatter *formt = [[NSDateFormatter alloc] init];
[formt setDateFormat:@"hh:mm a"];
[timesArr sortUsingComparator:^NSComparisonResult(NSString* ob1, NSString *ob2) {
NSDate *date1 = [formt dateFromString:ob1];
NSDate *date2 = [formt dateFromString:ob2];
return [date1 compare:date2];
}];
NSLog(@"timesArr: %@",timesArr);