отдельные домены в контактах Google - PullRequest
3 голосов
/ 24 ноября 2010
 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));

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

данные испытаний:

вх:

abca@gmail.com
sdafdf@yahoo.com
sdfs@gmail.com
ssdf@gmail.com
sdfsf@someOtherDomain.com

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

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

но мой o / p

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

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

gmail.com yahoo.com someOtherDomain.com

1 Ответ

1 голос
/ 24 ноября 2010

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

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();

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

...