我有一个NSMutableArray'arrcontacts',结构如下:
{
date = "2015-02-13 12:03:54 CST";
imgUrl = 10154469614215076;
latest = "2015-02-13 18:46:42 CST";
status = 1;
userName = Anthony;
}
我想获取此数组的内容并按“最新”键对其进行排序,以便首先按最新项目对数组进行排序。
这样做的最佳方式是什么?
答案 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)
您可以使用NSArray
和NSMutableArray
提供的各种排序方法。请注意,您可能希望将这些日期字符串转换为正确的NSDate
对象,以防它们中的任何一个具有不同的时区。
例如,您可以使用sortedArrayUsingComparator
将NSDateFormatter
转换为日期,然后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];
}];