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の個別のドメインを取得しようとしていますが、ロジックの問題をすべて取得していますか?

テストデータ:

inp:

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

...そのような20,000エントリ

DISTINCTドメインを取得する必要があります

しかし、私のo/pは

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

実際には次のようになります。

gmail.com yahoo.com someOtherDomain.com

4

1 に答える 1

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

そうは言っても、元のコードは実際に機能するはずです。失敗しているテストデータを提供していただけますか?

于 2010-11-24T12:42:29.407 に答える