Swift Array交叉属性

时间:2016-07-15 17:33:46

标签: arrays swift set intersection

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

1 个答案:

答案 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)