-->

集团的NSDate在几周内和为了从最新到最旧(Group NSDate in weeks and o

2019-10-24 14:05发布

我开发的iPhone应用程序,我陷进去了这一点:

我从一个对象这样的数据:

{
    date = "2014-08-04 11:21:26 +0000";
    idChallenger = "-1";
    index = "-1";
    time = "-1";
},
   {
    date = "2015-07-31 14:50:40 +0000";
    idChallenger = 43;
    index = "-1";
    time = "-1";
},
    {
    date = "2015-07-31 16:18:57 +0000";
    idChallenger = "-1";
    index = "-1";
    time = "-1";
},
    {
    date = "2015-07-31 16:19:29 +0000";
    idChallenger = "-1";
    index = "-1";
    time = "-1";
},
    {
    date = "2015-08-04 15:25:26 +0000";
    idChallenger = "-1";
    index = "-1";
    time = "-1";
}

现在,我应该得到所有的日期,按周和排序从最新到最旧...

这时我坚持要怎么组的NSDate由周,当有更多的年日,因为在结构上,例如第一个元素是最后一个元素分组的问题开始。

我能怎么做? 谢谢

编辑

这是我通过周使用组的代码:

NSMutableArray *weekArray = [NSMutableArray array];
for (int i = 0; i<52; i++) {

    [weekArray addObject:[NSMutableArray array]];
}


for (int i = 0; i<_array.count; i++) {

    NSDictionary *dict = [_array objectAtIndex:i];

    NSDate *date = [dict objectForKey:@"date"];

    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitWeekOfYear fromDate:date];

    NSMutableArray *innerArray = weekArray[[dateComponents weekOfYear] -1];
    [innerArray addObject:dict];
}

for (int i = 0; i<weekArray.count; i++) {

    if ([[weekArray objectAtIndex:i] count] > 0) {

        NSNumber *iNum = [NSNumber numberWithInt:i+1];

        [_mutableDictionary setObject:[weekArray objectAtIndex:i] forKey:iNum];
    }
}

_mutableDictionary是:

31 =     (
            {
        date = "2015-07-31 16:19:29 +0000";
        idChallenger = "-1";
        index = "-1";
        time = "-1";
    },
            {
        date = "2015-07-31 16:19:23 +0000";
        idChallenger = "-1";
        index = "-1";
        time = "-1";
    },
            {
        date = "2015-07-31 16:18:57 +0000";
        idChallenger = "-1";
        index = "-1";
        time = "-1";
    },
            {
        date = "2015-07-31 14:50:40 +0000";
        idChallenger = 43;
        index = "-1";
        time = "-1";
    }
);
32 =     (
            {
        date = "2015-08-04 15:25:26 +0000";
        idChallenger = "-1";
        index = "-1";
        time = "-1";
    },
            {
        date = "2014-08-04 11:22:40 +0000";
        idChallenger = 43;
        index = "-1";
        time = "-1";
    }
);

31和32年中的周数

我认为这是错误的,我的目标?

集团在此之后的NSDate以正确的方式,我必须有一个结构,它让我在UITableView中创建n个章节,每星期

Answer 1:

您需要立足于一年分组和年份的周。 您还需要避免硬编码52个空数组。 相反,使用数组的字典,其中键代表年份和周和值是数组。

尝试是这样的:

NSMutableDictionary *weeksDictionary = [NSMutableDictionary dictionary];

NSCalendar *calendar = [NSCalendar currentCalendar];
for (NSDictionary *dict in _array) {
    NSDate *date = [dict objectForKey:@"date"];
    NSDateComponents *dateComponents = [calendar components:NSCalendarUnitYear | NSCalendarUnitWeekOfYear fromDate:date];
    NSInteger year = dateComponents.year;
    NSInteger week = dateComponents.weekOfYear;
    NSInteger index = year * 100 + week;
    NSNumber *key = @(index);
    NSMutableArray *weekArray = weeksDictionary[key];
    if (!weekArray) {
        weekArray = [NSMutableArray array];
        weeksDictionary[key] = weekArray;
    }
    [weekArray addObject:dict];
}

这使您每年/周,有一个日期的数组。

要使用表格视图利用这一点,在字典的键排序,以获得年/周值的数组秩序。 然后,你可以拆分每个键获得年份和周:

NSNumber *key = sortedKeysArray[indexPath.section];
NSInteger value = key.integerValue;
NSInteger year = value / 100;
NSInteger week = value % 100;


文章来源: Group NSDate in weeks and order from newest to oldest