我希望简化以下包含foreach循环的代码,以最大限度地减少迭代和/或提高性能,因为LINQ和集合是在每次迭代时创建的:
foreach (Contact contact in Contacts) // phone contacts, around 500-1000
{
IEnumerable<ContactEmailAddress> emails = contact.EmailAddresses; // each has multiple emails
foreach (Friend parseUser in parseUsers) // could be many thousands
{
if (emails.Where(e => e.EmailAddress == parseUser.Email).ToList().Count > 0)
{
parseUser.AddContact(contact); // function call
verifiedUsers.Add(parseUser); // add to my new aggregated list
}
}
}
感谢。
答案 0 :(得分:3)
您可以使用可以更有效搜索的集合,例如emails
:而不是对parseUsers
中每个项目的HashSet
集合进行线性搜索p>
foreach (Contact contact in Contacts) // phone contacts, around 500-1000
{
HashSet<string> emails = new HashSet<string>(
contact.EmailAddresses.Select(e => e.EmailAddress));
foreach (Friend parseUser in parseUsers) // could be many thousands
{
if(emails.Contains(parseUser.Email))
{
parseUser.AddContact(contact); // function call
verifiedUsers.Add(parseUser); // add to my new aggregated list
}
}
}
答案 1 :(得分:1)
没有提高性能,但提高了可读性:
foreach (Friend parseUser in parseUsers) // could be many thousands
{
var filterContacts = Contacts.Where(contact =>
contact.EmailAddresses.Contains(parseUser.Email));
if (filterContact.Any())
{
parseUser.AddContacts(filterContacts);
verifiedUsers.Add(parseUser);
}
}