在Ios中排序时间范围

时间:2014-03-18 12:12:09

标签: ios iphone objective-c arrays sorting

我有一个类似

的数组
<__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];
}];

帮我解决这个问题。

3 个答案:

答案 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);