我正在尝试比较两个数组。一个数组是Person
个对象的数组,每个对象都有一个email
属性,即String
个电子邮件地址。另一个数组是EmailAddress
对象,其中包含“work”或“personal”等描述性字词以及实际的String
电子邮件地址。
基本上两个对象都有一个String
的电子邮件地址属性。我想比较这些对象数组,看看每个数组中的一个对象是否具有相同的电子邮件地址。现在我正在使用嵌套的for
循环,如下所示,但这需要太长时间。
for person in self.allPeople! {
for e in EmailAddresses! {
if e.value == person.email {
return true
}
}
}
我考虑过使用set intersection但看起来它只能用于比较相同的对象而不是对象的属性。感谢。
答案 0 :(得分:3)
您仍然可以通过首先创建一组所有电子邮件来使用Set
功能。 map
有助于将一个集合转换为另一个集合,在这种情况下,将allPeople
的集合更改为这些人email
的集合。这会更快,因为现在EmailAddresses
被迭代一次,而不是每人 。
let personEmails = Set(self.allPeople!.map { $0.email })
let matchingEmails = EmailAddresses!.map { $0.value }
return !personEmails.isDisjoint(with: matchingEmails)