2016-12-09 31 views
2

我有聯繫的陣列內部的對象的對象。迅速3 - 刪除從陣列中存在的另一個陣列

然後,我有與用戶的另一個陣列。

class Contact: NSObject { 

    var name: String? 
    var phoneNumber: String? 
    var phoneNumberFormatted: String? 

    init(name: String, phoneNumber: String?, phoneNumberFormatted: String) { 
     self.name = name 
     self.phoneNumber = phoneNumber 
     self.phoneNumberFormatted = phoneNumberFormatted 
    } 
} 


class User: NSObject { 

     var name: String? 
    } 

我怎麼才能把[Contact]一個聯繫對象,如果我有我的[User]具有匹配名稱的用戶?

我知道如何通過循環做,但什麼是最有效的方法是什麼?

+0

'PhoneNumber'對象具有'phoneNumber'字段。這沒有多大意義,是嗎? – Alexander

+1

我將phoneNumber對象名稱更改爲Contact。感謝您的幫助@AlexanderMomchliov – Walker

+0

聯繫人有沒有名字? – Alexander

回答

0

爲非重要數組大小做這件事的最好方法(計算效率最高)是預先計算您需要重複搜索的數組中的集合,並過濾另一個數組,只有在找不到它們時才保留元素在集合中。

這充分利用了SetO(1)查找性能。該算法總體上是O(userPhoneNumbers.count + contacts.count)

let userPhoneNumbers = Set(users.map{ $0.phoneNumber }) 
let filteredContacts = self.contacts.filter{ !userPhoneNumbers.contains($0.phoneNumber) } 
+0

亞歷克斯,我試圖過濾一個屬性,這兩個數組中的對象都有。答案並不清楚。心靈擴大一點?謝謝你 – Walker

+0

你是否熟悉map/reduce/filter? – Alexander