3 Stimmen

unterschiedliche Domains in Google Contacts

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

In obigen Code, ich versuche, verschiedene Domäne von E-Mail-ID zu erhalten, aber ich bekomme sie alle was Problem mit meiner Logik?

Testdaten:

inp:

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

... solche 20.000 Einträge

Ich muss mir DISTINCT Domänen

aber mein o/p ist

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

Eigentlich sollte es so sein:

gmail.de yahoo.de irgendeineandereDomäne.com

1 Stimmen

Bei Verwendung einer Liste ist dies O(n^2), bei Verwendung eines HashSets ist es O(n). Aber ich sehe keinen Fehler in diesem Code.

0 Stimmen

Testen Sie Ihren Code mit einer string[] als Eingabe und es funktionierte korrekt (abgesehen von der Groß- und Kleinschreibung).

1voto

Jon Skeet Punkte 1325502

Es ist nicht offensichtlich, was hier eigentlich falsch ist, aber es ist eine ineffiziente und hässliche Art, es zu tun. Ich schlage vor, Sie versuchen dies:

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

Davon abgesehen hätte Ihr ursprünglicher Code eigentlich funktionieren müssen. Könnten Sie einige Testdaten zur Verfügung stellen, die nicht funktionieren?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X