Swift数组交集通过属性

3
我正在尝试比较两个数组。一个数组是由Person对象组成,每个对象都有一个email属性,该属性是一个String电子邮件地址。另一个数组是一个EmailAddress对象,其具有像“工作”或“个人”这样的描述性单词和实际的String电子邮件地址。

基本上,这两个对象都有一个电子邮件地址的String属性。我想比较这些对象数组,以查看每个数组中的一个对象是否具有相同的电子邮件地址。现在,我正在使用嵌套的for循环来做到这一点,但是这太费时间了。

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

我考虑使用集合交集,但这似乎只适用于比较相同的对象而不是对象的属性。谢谢。

1个回答

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接