在iOS中对时间范围进行排序

3

I have an array like

<__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”和“To”关键字对这个数组进行排序?

我尝试了以下方法:

但效果不佳。

sortedDatesArray = [[unsortedDatesArray sortedArrayUsingComparator: ^(id a, id b) {
    NSDate *d1 = [NSDate dateWithString: s1];
    NSDate *d2 = [NSDate dateWithString: s2];
    return [d1 compare: d2];
}];

帮我解决这个问题。


那个数组甚至无法编译。 - Desdenova
现在它更有意义了。所以这是一个具有三个键的字典数组。您想按哪个键进行排序? - Desdenova
@Desdenova,感谢您的回复...就像一天24小时一样。如果需要使用“起始时间和结束时间”(即时间范围)进行排序 - user2893370
@Desdenova,抱歉我不明白你的意思,请详细解释一下。 - user2893370
试着理解这里发生了什么,它与你的情况有点相似 https://dev59.com/dWvXa4cB1Zd3GeqPKZLE - Desdenova
显示剩余2条评论
3个回答

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]];

希望这个回答能解决你的问题。 :)


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];
    }];

虽然这不是问题的答案,但您想要使用的格式是 @"hh:mma" - Desdenova

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接