一次優(yōu)化,如何使用KVC讓查詢速度提高n倍

需求

獲取一批客戶數(shù)據(jù)的時候,需要先調(diào)用接口拿到客戶的基本信息,然后再調(diào)用一個接口來獲取客戶的其他信息,最后合并在一起來使用。

優(yōu)化前

一般情況下數(shù)據(jù)量不大,所以沒有多想,簡單的for循環(huán)了下:

for (CustomerNode *custModel in custInfoColumnArray) {
    //結(jié)果集
    NSMutableArray *resultMutiArray = [resultArray mutableCopy];
    for (NSDictionary *dict in resultMutiArray) {
        NSString *custNum = [dict valueForKey:@"custNum"];
        NSString *unVisitDay = [dict valueForKey:@"unVisitDay"];
        NSString *returnDay = [dict valueForKey:@"returnDay"];
        // 判斷custNum一致
        if ([custModel.custNum isEqualToString:custNum]) {
            custModel.unVisitDay = unVisitDay;
            custModel.returnDay = returnDay;
            [resultMutiArray removeObject:dict];
            break;
        }
    }
}

有一天客戶反映列表打開巨慢,一查這個resultArray居然至少有5000條數(shù)據(jù),測了下需要4秒才能處理完,必須進行優(yōu)化了。

優(yōu)化

顯然通過for循環(huán)來查找對象速度太慢,那還有什么好辦法呢?
考慮了一下,使用key-value結(jié)構(gòu)的的hash表查找機制,應該是效率最高的,改造一下:

// 創(chuàng)建一個key-value結(jié)構(gòu)數(shù)據(jù),key為需要匹配的cusNum,值為對應的完整對象
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
for (NSDictionary *dic in resultArray) {
    [resultDict setValue:dic forKey:[dic valueForKey:@"custNum"]];
}
for (CustomerNode *custModel in custInfoColumnArray) {
    // 直接通過valueForKey匹配到需要修改的對象
    NSDictionary *dict = [resultDict valueForKey:custModel.custNum];
    NSString *unVisitDay = [dict valueForKey:@"unVisitDay"];
    NSString *returnDay = [dict valueForKey:@"returnDay"];
    custModel.unVisitDay = unVisitDay;
    custModel.returnDay = returnDay;
}

不出所料,因為通過KVC方式匹配數(shù)據(jù)效率高到可以忽略,一共只循環(huán)了2次,執(zhí)行時間幾乎變?yōu)榱怂查g,完美!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,181評論 25 708
  • 理由很簡單,就是不愛妳了。好,這篇文章到此結(jié)束。 如果他愛妳,不會讓妳的訊息已讀不回; 如果他愛妳,不會讓妳訊息傷...
    安蕎琳閱讀 428評論 7 7
  • 該項目需求的必要性了解 百度統(tǒng)計策略優(yōu)化 每周一分享 《窮查理寶典》80%>85% 打游戲 寫一篇文章
    伽藍214閱讀 113評論 0 0
  • 一直以來,總覺時間不夠用,從清晨的吃喝拉撒,到晚上的洗澡哄睡,常常面現(xiàn)無奈,難道真是因為孩子我們才失去了自由么? ...
    格桑美朵1閱讀 288評論 0 3

友情鏈接更多精彩內(nèi)容