Objective C - 按时间排序数组

时间:2015-02-14 02:42:06

标签: ios objective-c nsmutablearray

我有一个NSMutableArray'arrcontacts',结构如下:

{
        date = "2015-02-13 12:03:54 CST";
        imgUrl = 10154469614215076;
        latest = "2015-02-13 18:46:42 CST";
        status = 1;
        userName = Anthony;
}

我想获取此数组的内容并按“最新”键对其进行排序,以便首先按最新项目对数组进行排序。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用[-sortedArrayUsing*]方法中的任何一种,例如[arrcontacts sortedArrayUsingFunction:sortByLatest],其中sortByLatest是C函数,如下所示:

NSInteger sortByLatest(NSDictionary* left, NSDictionary* right, void* context)
{
    return [[left objectForKey:@"latest"] compare:[right objectForKey:@"latest"];
}

答案 1 :(得分:0)

您可以使用NSArrayNSMutableArray提供的各种排序方法。请注意,您可能希望将这些日期字符串转换为正确的NSDate对象,以防它们中的任何一个具有不同的时区。

例如,您可以使用sortedArrayUsingComparatorNSDateFormatter转换为日期,然后compare

NSArray *array = @[@{@"date" : @"2015-02-13 12:03:54 CST", @"imgUrl" : @10154469614215076, @"latest" : @"2015-02-13 18:46:42 CST", @"status" : @1, @"userName" : @"Anthony"},
                   @{@"date" : @"2015-01-13 12:03:54 CST", @"imgUrl" : @10154469614215076, @"latest" : @"2015-01-13 18:46:42 CST", @"status" : @1, @"userName" : @"Dick"},
                   @{@"date" : @"2015-03-13 12:03:54 CST", @"imgUrl" : @10154469614215076, @"latest" : @"2015-03-13 18:46:42 CST", @"status" : @1, @"userName" : @"Harry"}];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss zzz";

NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSDate *date1 = [formatter dateFromString:obj1[@"latest"]];
    NSDate *date2 = [formatter dateFromString:obj2[@"latest"]];
    return [date1 compare:date2];
}];

或者,如果您想要排序NSMutableArray,可以这样做:

[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    NSDate *date1 = [formatter dateFromString:obj1[@"latest"]];
    NSDate *date2 = [formatter dateFromString:obj2[@"latest"]];
    return [date1 compare:date2];
}];