根据营业时间分组天数

时间:2014-02-13 13:04:08

标签: objective-c loops

我有一个类Time的项目数组。 Time包含3个属性:weekDay(范围从1到7,周日到周六),openHour(00h00到23h59)和closeHour(00h00到23h59)。

我想要的是,给出一个像这样的数组:

[{1, "10h00", "17h00"},
 {2, "08h00", "18h00"},
 {3, "08h00", "18h00"},
 {4, "08h00", "18h00"},
 {5, "08h00", "18h00"},
 {6, "09h00", "17h00"},
 {7, "09h00", "17h00"}]

写下这样的日期和时间列表:

  

周日:10:00-17:00周一至周四:08:00-18:00周五至周六:09:00-17:00

我可以轻松地每天写一行,但我不知道如何分组具有相同时段的天数(相等的开放和关闭时间)。如何正确创建这些范围?

任何伪代码都会对我有所帮助,但这将在Objective-C中实现。如果任何人知道库或者某些东西使Objective-C更容易,那也会有所帮助。

1 个答案:

答案 0 :(得分:1)

这样的事情可行。我太懒了,无法创建课程,但它应该让你知道如何处理问题。

一般的想法是遍历所有日子,获取每天的价值,将其与前一天进行比较,并检查营业时间是否相同。

如果您的类上有isEqualToTime:方法,则要将其与之前的时间进行比较,以提高效果。当然,如果要对其进行分组,请更改NSLog输出以将组信息保存到NSDictionary或任何您想要的内容。

NSArray* rangeStartElement = nil;
NSArray* rangeStopElement = nil;

for (int day = 0; day < 7; day++)
{
    NSArray* valuesForCurrentDay = [openConfig objectAtIndex:day];
    NSString* currentFrom = [valuesForCurrentDay objectAtIndex:1];
    NSString* currentTo = [valuesForCurrentDay objectAtIndex:2];

    if(rangeStartElement == nil)
    {
        rangeStartElement = valuesForCurrentDay;
    }
    else
    {
        NSString* previousFrom = [rangeStartElement objectAtIndex:1];
        NSString* previousTo = [rangeStartElement objectAtIndex:2];

        BOOL isSameAsPrevious = [currentFrom isEqualToString:previousFrom] && [currentTo isEqualToString:previousTo];
        if(isSameAsPrevious)
        {
            rangeStopElement = valuesForCurrentDay;
        }

        if(isSameAsPrevious == NO || day == 6)
        {
            if(rangeStopElement)
            {
                NSLog(@"Day %@ - Day %@: %@ - %@",
                      [rangeStartElement objectAtIndex:0],
                      [rangeStopElement objectAtIndex:0],
                      [rangeStartElement objectAtIndex:1],
                      [rangeStartElement objectAtIndex:2]);
            }
            else
            {
                NSLog(@"Day %@: %@ - %@",
                      [rangeStartElement objectAtIndex:0],
                      [rangeStartElement objectAtIndex:1],
                      [rangeStartElement objectAtIndex:2]);
            }

            rangeStartElement = valuesForCurrentDay;
        }
    }
}

编辑:

根据你的说法,如果你真的想要自定义排序,我建议创建一个这样的帮助类:

@interface OpeningGroup
@property (nonatomic, retain) NSString* from;
@property (nonatomic, retain) NSString* to;
@property (nonatomic, retain) NSString* days;
- (BOOL) addTimeObject:(Time*) timeObject;
@end

如果“from”和“to”相同,则保留这些对象的数组并尝试将其添加到组中。如果成功则返回YES / NO。如果找不到任何组 - 创建一个新组。比你每组保持几天。 稍后你只需要弄清楚如何显示结果,但应该很容易。