2010-11-24 2 views
3
List<string> ls = new List<string>(); 
Feed<Contact> f = cr.GetContacts(); 

     foreach (Contact e in f.Entries) 
      foreach (EMail el in e.Emails) 
       if (!(ls.Contains(el.Address.Substring(el.Address.LastIndexOf('@')+1)))) 
        ls.Add(el.Address.Substring(el.Address.LastIndexOf('@')+1)); 

В приведенном выше коде я пытаюсь получить отдельный домен id электронной почты, но я получаю их все проблемы с моей логикой?различные домены в Google Контакты

тестовых данных:

вх:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

... такие 20000 записей

мне нужно получить DISTINCT домены

но мой о/р

gmail.com 
yahoo.com 
gmail.com 
gmail.com 
someOtherDomain.com 

на самом деле это должно быть:

gmail.com yahoo.com someOtherDomain.com

+1

Использование списка это O (n^2), используя HashSet, а не O (n). Но я не вижу ошибки в этом коде. – CodesInChaos

+0

Протестировал ваш код с помощью 'string []' как входного файла, и он работал корректно (кроме чувствительности к регистру). – CodesInChaos

ответ

1

Это не очевидно, что на самом деле здесь не так, но это неэффективно и некрасиво способ сделать это. Я предлагаю вам попробовать следующее:

var domains = (from contact in cr.GetContacts().Entries 
       from email in contact.Emails 
       let address = email.Address 
       select address.Substring(address.LastIndexOf('@') + 1)) 
       .Distinct(StringComparer.OrdinalIgnoreCase) 
       .ToList(); 

Сказав это, ваш исходный код действительно должен был сработать. Не могли бы вы предоставить некоторые данные теста, которые не работают?

+0

Домены не чувствительны к регистру, это чувствительно к регистру. Если ваш класс EMail уже canonicalizes это. И, возможно, проверьте, имеет ли EMail свойство для части домена. Например, 'MailAddress' имеет свойство' Host', которое делает это. (И нет, я не был downvoter) – CodesInChaos

+0

@CodeInChaos: Отредактировано, чтобы сделать его нечувствительным к регистру - хотя, учитывая входные данные, я не думаю, что это не так. –

Смежные вопросы