iOS提高數(shù)組遍歷性能的小技巧

利用set提高遍歷性能

let members: [Member]
let platinumMemberIDs:[Int]

優(yōu)化前
時(shí)間復(fù)雜度是O(n2)

var platinumMembers = members.filter {
    platinumMemberIDs.contains($0.id)
}

優(yōu)化后
時(shí)間復(fù)雜度是O(n)

let platinumMemberIDSet = Set(platinumMemberIDs)
var platinumMembers = members.filter {
    platinumMemberIDSet.contains($0.id)
}

利用字典提高遍歷性能

let starUsers: [User]
let recentUsers: [User]

優(yōu)化前
時(shí)間復(fù)雜度是O(n2)

ar duplicatedUsers = [User]()
for star in starUsers {
  for recent in recentUsers {
    if star.email == recent.email {
      duplicatedUsers.append(star)
    }
  }
}

優(yōu)化后
時(shí)間復(fù)雜度是O(n)

let recentUserMap = Dictionary(uniqueKeysWithValues: recentUsers.map { ($0.email, $0) })
let duplicatedUsers = starUsers.filter {
  guard let _ = recentUserMap[$0.email] else { return false }
  return true
}

如何通過(guò)減少集合類(lèi)型初始化來(lái)提高iOS代碼性能?

使用 reduce(::)reduce(into:_:) 來(lái)演示執(zhí)行速度的差異。這兩個(gè)示例都旨在創(chuàng)建一個(gè)以用戶(hù)名為鍵,以用戶(hù)ID為值的字典

Example 1

let userDict = users.reduce([String: Int]()) { (dict, user) -> [String: Int] in
    var dict = dict
    dict[user.name] = user.id
    return dict
}

Example 2

let userDict2 = users.reduce(into: [:]) { dict, user in
    dict[user.name] = user.id
}

示例1的執(zhí)行時(shí)間為0.07398414611816406秒,而示例2的執(zhí)行時(shí)間為0.0013837814331054688秒。它比示例1快50多倍

參考資料:
https://betterprogramming.pub/how-to-boost-your-ios-code-performance-by-reducing-collection-type-initialisation-564bffee94a3

https://betterprogramming.pub/how-to-boost-your-ios-code-performance-reduce-searching-an-array-55fbdfee2050

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

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

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