2016-07-15 68 views
1

我想比較兩個數組。一個數組是一組Person對象,其中每個對象都有一個email屬性,該屬性是String電子郵件地址。另一個陣列是一個EmailAddress對象,其中有一個描述性詞語,如「work」或「personal」以及實際的String電子郵件地址。Swift Array屬性交集

基本上這兩個對象都有一個String屬性的電子郵件地址。我想比較這些對象數組,以查看每個數組中的某個對象是否具有相同的電子郵件地址。現在我正在使用如下所示的嵌套for循環,但這需要很長時間。

for person in self.allPeople! { 
    for e in EmailAddresses! { 
     if e.value == person.email { 
      return true    
     } 
    } 
} 

我想過使用set intersection但看起來它只會比較相同對象的工作,而不是對象的屬性。謝謝。

回答

2

您仍然可以通過首先創建一組所有電子郵件來使用Set功能。 map有助於將一個收藏集轉換爲另一個收藏集,在這種情況下,將您的收藏集allPeople更改爲這些人的收藏集email s。這將更快,因爲現在EmailAddresses迭代一次,而不是每個人一次

let personEmails = Set(self.allPeople!.map { $0.email }) 
let matchingEmails = EmailAddresses!.map { $0.value } 
return !personEmails.isDisjoint(with: matchingEmails)