【问题标题】:how to sort the time in a NSMutableArray in ios如何在 ios 的 NSMutableArray 中对时间进行排序
【发布时间】:2015-11-18 11:47:53
【问题描述】:

我在 NSMutableArray 中有一组字典。现在我想按时间升序和降序排序这是我的数组值。

(
    {
    StartTime = "09:00 AM";
    TravelsName = "ABC Travels";
},
    {
    StartTime = "07:30 AM";
    TravelsName = "XYZ Travels ";
},
    {
    StartTime = "06:45 PM";
    TravelsName = "GSP  Travels";
},
    {
    StartTime = "05:00 PM";
    TravelsName = "Madura  Travels";
},
    {
    StartTime = "12:45 AM";
    TravelsName = "MJT Travels";
},
    {
    StartTime = "12:45 PM";
    TravelsName = "OPR Travels";
},
    {
    StartTime = "01:00 AM";
    TravelsName = "VMS Travels";
}
)

请帮助我,我已经对 NSMutableArray 中的 NSDate 集进行了排序 通过下面的代码

//To sort the Time Array
dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:mm a"];

    NSMutableArray *dates = [NSMutableArray arrayWithCapacity:times.count];

    for (NSString *timeString in times)
    {
        NSDate *date = [dateFormatter dateFromString:timeString];
        [dates addObject:date];
    }
    [dates sortUsingSelector:@selector(compare:)];

    NSMutableArray *sortedTimes = [NSMutableArray arrayWithCapacity:dates.count];
    for (NSDate *date in dates)
    {
        NSString *timeString = [dateFormatter stringFromDate:date];
        [sortedTimes addObject:timeString];
    }

但我不知道如何对 NSMutableArray 中的字典进行排序帮助我。

【问题讨论】:

  • NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"StartTime" 升序:YES]; sortDescriptors = [NSArray arrayWithObject:brandDescriptor]; sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];

标签: ios objective-c sorting nsmutablearray nsmutabledictionary


【解决方案1】:

最好使用NSArray中已经提供的排序方法。应该这样做:

NSArray *stortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *_Nonnull obj1, NSDictionary *_Nonnull obj2) {
        return [obj1[@"StartTime"] compare:obj2[@"StartTime"]];
}];

或者如果StartTime 仍然是一个字符串:

NSArray *stortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *_Nonnull obj1, NSDictionary *_Nonnull obj2) {
    return [[dateFormatter dateFromString:obj1[@"StartTime"]] compare:[dateFormatter dateFromString:obj2[@"StartTime"]]];
}];

要更改升序/降序,您只需在块中使用 obj1obj2 即可:

return [obj2[@"StartTime"] compare:obj1[@"StartTime"]];

【讨论】:

  • 但在您的代码中给出了一些错误,例如不兼容的块指针类型将 NSComparisonResult((^)(NSdDictionary *_strong)) 发送到 NSComparator 类型的参数 .. 所以我尝试了...NSArray *stortedArray = [ totDictArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary *obj2) { return [[dateFormatter dateFromString:obj1[@"StartTime"]] 比较:[dateFormatter dateFromString:obj2[@"StartTime"]]]; } ];
猜你喜欢
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多