我有一个类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更容易,那也会有所帮助。
答案 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。如果找不到任何组 - 创建一个新组。比你每组保持几天。 稍后你只需要弄清楚如何显示结果,但应该很容易。