最近遇到一个按时间排序评论数组的问题,参考网上资料,亲测以下方法可行。好记性不如烂笔头,记录以下!
#pragma mark+++ 排序 +++
- (NSArray*)arrayWithTimeSeq:(NSArray*)inputData{
//模型中time为时间戳
for(inti =0; i < inputData.count; i ++) {
NSDictionary*model = inputData[i];
NSLog(@"排序前 == %@", model[@"createDate"]);
}
NSLog(@"\n");
// 时间戳数组(存放时间NSDate对象用于排序)
NSMutableArray *timeArr = [[NSMutableArray alloc]init];
// 时间戳-对象字典,将对象和其对应的时间戳字符串存入字典(哈希表)
NSMutableDictionary *dateKeyArr = [[NSMutableDictionary alloc]init];
// 时间戳取出,并格式化处理
for(NSDictionary*modelininputData) {
// 1.时间戳转成时间对象用于排序
// iOS 生成的时间戳是10位
NSDateFormatter*dateFormatter = [[NSDateFormatteralloc]init];
[dateFormattersetDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormattersetTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
NSDate*date = [dateFormatterdateFromString:model[@"createDate"]];
[timeArraddObject:date];
// 2.时间戳转成时间戳字符串作为key,制作哈希表=
[dateKeyArrsetObject:modelforKey:model[@"createDate"]];
}
// 3.将时间NSDate数组排序
NSArray*orderedDateArray = [timeArrsortedArrayUsingComparator:^NSComparisonResult(NSDate*date1,NSDate*date2) {
// 排序,最近的时间靠后
return[date1compare:date2];
}];
// 根据排序好的时间数组对号入座将对象按时间排序
// 临时数组,保存排序后的对象数组
NSMutableArray*sortedAccounts = [[NSMutableArrayalloc]init];
NSDate*datekey = [[NSDatealloc]init];
for(inti =0; i
{
datekey = orderedDateArray[i];
// 日期对象转换成时间戳字符串key
NSDateFormatter*dateFormatter = [[NSDateFormatteralloc]init];
[dateFormattersetDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dateFormattersetTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
NSString*strDate = [dateFormatterstringFromDate:datekey];
// 根据时间戳字符串key取对应的对象(哈希表)
[sortedAccountsaddObject:[dateKeyArrobjectForKey:strDate]];
}
for(intj =0; j < sortedAccounts.count; j ++)
{
NSDictionary*model = sortedAccounts[j];
NSLog(@"排序后 == %@", model[@"createDate"]);
}
returnsortedAccounts;
}
网友评论