美文网首页ios
iOS 数组按时间戳降序排序

iOS 数组按时间戳降序排序

作者: 土豆卡 | 来源:发表于2018-10-10 14:49 被阅读0次

    此方法是根据网上的方法改良的,解决了排序不准确的问题

    - (void)arrayWithTimeSeq:(NSArray*)inputData{
        //模型中time为时间戳
        for (int i = 0; i < inputData.count; i ++) {
            Model *model = inputData[i];
            NSLog(@"排序前 == %@", model.time);
        }
        NSLog(@"\n");
        // 时间戳数组(存放时间NSDate对象用于排序)
        NSMutableArray *timeArr = [[NSMutableArray alloc]init];
        // 时间戳-对象字典,将对象和其对应的时间戳字符串存入字典(哈希表)
        NSMutableDictionary *dateKeyArr = [[NSMutableDictionary alloc]init];
        
        // 时间戳取出,并格式化处理
        for(Model *model in inputData) {
      
            // 1.时间戳转成时间对象用于排序
            // iOS 生成的时间戳是10位
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
            [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
            NSDate *date = [dateFormatter dateFromString:model.time];
            [timeArr addObject:date];
            
            // 2.时间戳转成时间戳字符串作为key,制作哈希表=
            [dateKeyArr setObject:acc forKey:model.time];
        }
        
        // 3.将时间NSDate数组排序
        NSArray *orderedDateArray = [timeArr sortedArrayUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) {
            // 降序排序,最近的时间靠前
            return [date2 compare:date1];
        }];
        
        // 根据排序好的时间数组对号入座将对象按时间排序
        // 临时数组,保存排序后的对象数组
        NSMutableArray *sortedAccounts = [[NSMutableArray alloc]init];
        NSDate *datekey = [[NSDate alloc]init];
        for (int i = 0; i<orderedDateArray.count; i++) {
            datekey = orderedDateArray[i];
            // 日期对象转换成时间戳字符串key
            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
            [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];//解决8小时时间差问题
            NSString *strDate = [dateFormatter stringFromDate:datekey];
            // 根据时间戳字符串key取对应的对象(哈希表)
            [sortedAccounts addObject:[dateKeyArr objectForKey:strDate]];
        }
        
    
        
        for (int j = 0; j < sortedAccounts.count; j ++) {
            Model *model = sortedAccounts.count[i];
            NSLog(@"排序后 == %@", model.time);
        }
    }

    相关文章

      网友评论

        本文标题:iOS 数组按时间戳降序排序

        本文链接:https://www.haomeiwen.com/subject/zybpaftx.html