【问题标题】:Sort Time Range in Ios在 Ios 中对时间范围进行排序
【发布时间】:2014-03-18 12:12:09
【问题描述】:

我有一个类似的数组

<__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,感谢您的回复......它喜欢一天 24 小时。如果需要使用“From & To”(即时间范围)进行排序
  • 我不确定该范围是否可排序。如果标题最早开始但花费的时间最多等等会怎样?

标签: ios iphone objective-c arrays sorting


【解决方案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]];

我希望这能回答您的问题。 :)

【讨论】:

    【解决方案2】:

    试试这个:

    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"
    【解决方案3】:

    我试过你的代码,试试下面的代码。我更改了您数组中的字段。或者您可以更改日期格式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-03
      • 2016-09-11
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多