原标题:双重for循环如何优化效率?
关键字:iOS,程序员,算法,编程,优化策略
最佳回答:知乎用户
回答字数:1018字
这个问题解决了,我直接粘贴代码把。感谢
钟颖Cyan
的回答,很受启发。
在取到数据之后,直接把他们放到全局字典里,字典正好还有排重功能。
-(void)reloadData{
_allScheduleArray = [self.evEngine.businessCoreDataManager efGetAllSchedule];
for (ScheduleEntity *schedule in _allScheduleArray) {
NSString *currDateStr = [NSDate stringFromDate:[NSDate dateWithTimeIntervalSince1970:[schedule.sTime doubleValue]] format:kDateFormat];
NSLog(@%@,currDateStr);
[_markDic setObject:@1 forKey:currDateStr];
}
}
然后每次调用比较的时候,只需要看字典里有没有这个键就好了,有就return YES
– (BOOL)calendarHaveEvent:(JTCalendar *)calendar date:(NSDate *)date
{
NSString *oldDateStr = [NSDate stringFromDate:date format:kDateFormat];
if (_markDic[oldDateStr]) {//存在即找到
return YES;
}
return NO;
}
这样改之后,效率大大提高,用户完全感受不到2秒的等待了,秒出。
联系作者
回答作者:知乎用户
外层for循环,匹配用字典判断,这样只需要一层for循环就好,只不过内层的字典需要在外面由原本该在内层的for循环先转换成字典,这样的复杂度就是 O(n) + O(n)了,210+50,而不是210*50