我一直对此问题一无所知,所以我想也许有些人可以了解情况。

长话短说,我正在构建一个应用程序,该程序可从服务器获取一名学生的时间表,对其进行解析,并以表格视图的形式显示。每个学生每天有7个学期,并且时间表中有10天跨越一个两周(A周为5天,B周为5天)。

但是,问题出在有些学生有空闲时间-也就是说,他们在这段时间没有上课。由于服务器不考虑空闲时间,因此某些学生可能在两周之内总共返还70个学期,而另一些学生则可能返还66个学时。

在这里切入正题...

我有一个完整的NSDictionaries的有序NSMutableArray。当输出到控制台时,数组中的典型对象将如下所示:

{
    weekday = 12;
    period = 1;
    room = "Room D404";
    title = "English Extension";
},


我需要弄清楚顺序中的中断点,如果是,请将一个对象插入其中以填补空白。让我给你举个例子:

{
    dayweek = 12;
    period = 1;
    room = "Room D404";
    title = "English Extension";
},
    {
    dayweek = 12;
    period = 2;
    room = "Room W285";
    title = "Modern History";
},
    {
    dayweek = 12;
    period = 3;
    room = "Room W187";
    title = "Maths Extension 1";
},
    {
    dayweek = 12;
    period = 4;
    room = "Room W370";
    title = Economics;
},
    {
    dayweek = 12;
    period = 6;
    room = "Room D301";
    title = "English Advanced";
},
    {
    dayweek = 12;
    period = 7;
    room = "Room W282";
    title = "Studies of Religion";
},
    {
    dayweek = 13;
    period = 1;
    room = "Room W370";
    title = Economics;
},


period = 5没有对象,因此我需要添加一个。我说的很难理解吗?抱歉,如果是。

提前致谢!

最佳答案

它将填写从1到一天中最后一个存在的缺失期间。它不会在指定的最短期间内占用几天的时间。

NSMutableArray periods; // from somewhere else

NSUInteger count = [periods count];
NSUInteger currentPeriod = 0;
NSUInteger currentDayweek = 0;
for (NSUInteger i = 0; i < count; ++i)
{
    NSDictionary *periodDescription = periods[i];
    NSUInteger dayweek = [periodDescription[@"dayweek"] unsignedIntegerValue];
    if (dayweek != currentDayweek) {
        // another day
        currentPeriod = 0;
        currentDayweek = dayweek;
    }
    NSUInteger period = [periodDescription[@"period"] unsignedIntegerValue];
    currentPeriod += 1;
    while (period > currentPeriod) {
        NSDictionary *fillIn = @{ @"dayweek" : @(dayweek), @"period" : @(currentPeriod), @"room" : @"cafeteria", @"title" = "taking a break" };
        [periods insertObject:fillIn atIndex:i];
        currentPeriod += 1;
        i += 1;
        count += 1;
    }
}


如果您不想在第一个现有时段之前填满早上的时间,请将其直接添加到while循环之前:

    if (currentPeriod == 1)
        currentPeriod = period;


注意:在浏览器中键入,很可能出错。

关于ios - 顺序订购的NSMutableArray-按顺序更换制动器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15566979/

10-14 23:10
查看更多