我有一個(可能非常大)陣列users。如果用戶包含在其中,我想從該陣列中洗掉特定用戶。這是我的代碼:
if users.contains(user) {
users = users.filter { $0.id != user.id }
count -= 1
change -= 1
}
從時間和空間復雜度的角度考慮,contains()是O(n)的操作,filter()也是O(n)的操作。
我可以這樣做:
for (index, user) in users.enumerated() {
if user == userToRemove {
users.remove(at: index)
count -= 1
change -= 1
}
}
但這remove(at:)是一個 O(n) 操作,就像 for 回圈一樣。所以在這兩種情況下,我都必須遍歷整個陣列兩次。
我可以做的另一件事是將其轉換為Set預先,但這會失去排序。
有什么方法可以提高效率,使其最多只能回圈一次?
uj5u.com熱心網友回復:
假設您想要唯一的用戶,您可以只使用 a Set,其contains為 O(1)。
如果您需要訂購用戶,您可以OrderedSet從Swift Collections包中使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405057.html
標籤:
