2016-07-15 34 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)