美文网首页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 数组按时间戳降序排序

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

  • 2018-01-14

    php数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据...

  • MySQL 排序

    排序查询 查询所有学生记录,按年龄升序排序 查询所有学生记录,按年龄降序排序 查询所有雇员,按月薪降序排序,如果月...

  • Linux命令--ls

    参数说明 -l 展示当前目录下文件详细信息列表-S 按文件大小排序(降序)-t 按文件时间排序(降序)-h 文件大...

  • 数组相关处理函数2

    冒泡排序法 快速排序法 数组排序函数 ksort 对数组按照键名排序 krsort 键名降序排序 asort 对数...

  • pandas 的一些不常用技巧

    1、pandas 按列值排序 按col_name1和col_name2 排序。排序方式降序。 2、 时间格式解析 ...

  • C# 数组排序

    //数组排序 //按照降序排序 升序把x和y换一下 数组.Sort(dele...

  • 从小到大,从大到小,PHP 数组排序

    数组排序:数组中的元素能够以字母或数字顺序进行升序或降序排序。 PHP - 数组的排序函数 sort() - 以升...

  • 数组 - 普通数组排序和对象数组根据某个字段排序

    > 普通数组排序 降序 (升序的话a-b就行) > 对象数组排序 https://www.jb51.net/art...

  • 一维数组

    一维数组通常用于数组的查找和排序 排序 1:倒序输出 2:升序or降序排列冒泡排序法 查找

网友评论

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

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