有没有办法让下面的活动更有效率。
+ (NSMutableArray *)sortArrayOfOrdersByDate:(NSMutableArray *)array{
//create an array of the dates from the Order class
NSMutableArray *dates = [[NSMutableArray alloc] init];
for (Order *order in array)
[dates addObject:[Utility parseDateFromString:order.date format:@"MM-dd-yyyy HH:mm"]];
//algorithm to sort the array of dates
NSArray *datesSorted = [dates sortedArrayUsingComparator:
^(id obj1, id obj2) {
return [obj2 compare:obj1];
}];
//match and build a complete, sorted array of orders
NSMutableArray *ordersSorted = [[NSMutableArray alloc] init];
for (NSDate *theDate in datesSorted)
for (Order *order in array)
if ([[Utility parseStringFromDate:theDate format:@"MM-dd-yyyy HH:mm"] isEqualToString:order.date])
[ordersSorted addObject:order];
return ordersSorted;
}
我将解释发生了什么,我有一个名为 Order 的类,它是从数据库中提取的。
由于数据库是不支持日期时间字段的 SQLite,因此我无法从查询中按日期排序,这就是我编写此函数的原因。
订单有一个属性“日期”,它只是一个文本字符串。
为此,我正在使用该值的日期解析版本创建一个 NSDates 数组。
我对日期进行排序,然后尝试通过将每个日期的字符串解析版本与存储在 order.date 中的内容进行比较来创建一个新数组
我的测试数据库中有大约 80 个订单,点击打开视图控制器的按钮有明显的延迟。
任何人都可以帮助提高效率吗,我知道目前它很hacky?
结果
在@bbum 的建议下,我将属性解析并存储order.date
为NSDate
从数据库中出来的属性,然后使用一个简单的sortedArrayUsingComparator:
调用来轻松比较order.date
属性。
解决方法见下文:
+ (NSArray *)sortArrayOfOrdersByDate:(NSMutableArray *)array{
return [array sortedArrayUsingComparator:^(id obj1, id obj2) {
return [((Order *)obj2).date compare:((Order *)obj1).date];
}];
}
没有解析/解析使这个解决方案更快,而且,我设法剪掉了双循环和它上面的单循环。