Swift 数组相交 属性

Swift Array intersection by property

我正在尝试比较两个数组。一个数组是 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,但看起来它只适用于比较相同的对象,而不适用于对象的属性。谢谢。

您仍然可以通过首先创建一组所有电子邮件来使用 Set 功能。 map 有助于将一个集合变成另一个集合,在这种情况下,将您的 allPeople 集合更改为这些人的 email 集合。这会更快,因为现在 EmailAddresses 迭代一次,而不是 per person.

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