Reputation: 569
I am trying compare two arrays. One array is an array of Person
objects, each of which has an email
property that is a String
email address. The other array is an EmailAddress
object which has a descriptive word like "work" or "personal" and the actual String
email address.
Basically both objects have a String
property for email address. I want to compare these arrays of objects to see if one of the objects from each array has the same email address. Right now I am using nested for
loops as shown below but that is taking too long.
for person in self.allPeople! {
for e in EmailAddresses! {
if e.value == person.email {
return true
}
}
}
I thought about using set intersection but that looked like it would only work for comparing the same objects and not object's properties. Thanks.
Upvotes: 3
Views: 1991
Reputation: 14824
You can still use Set
functionality by first creating a set of all the emails. map
helps turn one collection into another, in this case changing your collection of allPeople
into a collection of those people's email
s. This will be faster because now EmailAddresses
is iterated once, instead of once per person.
let personEmails = Set(self.allPeople!.map { $0.email })
let matchingEmails = EmailAddresses!.map { $0.value }
return !personEmails.isDisjoint(with: matchingEmails)
Upvotes: 3