有沒有辦法讓下面的活動更有效率?更有效的嵌套循環計算
+ (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,因此我沒有簡單的方法讓我在查詢中按日期排序,這就是我寫這個函數的方式。
訂單有一個屬性'date',它只是一個文本字符串。
爲此,我使用此值的日期解析版本創建NSDates數組。
我的日期進行排序,然後嘗試通過比較每個日期的字符串解析的版本,以一個新的數組,存儲的內容在order.date
我在我的測試數據庫中約80訂單,點擊打開視圖控制器的按鈕會有明顯的延遲。
任何人都可以幫助提高這個效率嗎?我知道目前這很有趣嗎?
觀察
隨着@ 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];
}];
}
解析/ Unparsing的缺失使得該解決方案更快,另外,我設法削減了雙迴路和它上面的單迴路。
也許我失去了一些東西,但是你爲什麼不BY子句添加命令,查詢從數據庫中提取? – bengoesboom
@bengoesboom SQLite不支持日期時間字段,所以按日期字段排序會將其視爲字符串。在要求的日期格式中,可能存在不一致,因爲日期不是分層的(yyyy-mm-dd),而是美國的(mm-dd-yyyy)。 –