ios - 在 Ios 中排序时间范围

标签 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 & to 键按时间范围对该数组进行排序?

我试过如下:

但不是很好

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

帮我解决这个问题。

最佳答案

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

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

关于ios - 在 Ios 中排序时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479027/

相关文章:

ios - 按周显示 NSDates

ios - 在iOS 11中调用self.setNeedsStatusBarAppearanceUpdate()时,scrollViewDidScroll崩溃

ios - 使用自定义图像设置所有后退按钮,如 leftBarButtonItem

ios - 使用 Xcode 6 绕过代码签名

objective-c - Cocoa AppKit - 关闭模式窗口(即弹出窗口或上下文菜单)并按下当前悬停在上方的按钮

ios - 未在可移植类库中实现。在 iOS 应用程序中将 Riverts 与 Xamarin 结合使用

iphone - 在现有 iPhone 项目上将编译器更改为 llvm-clang

iphone - 来自 C 代码的 NSLog 样式调试消息

iphone - 将按钮组合在一起以便于操作

iphone - 下面的代码执行时会发生什么? Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];