从电子邮件列表中获取唯一域列表

use*_*102 2 .net c# linq .net-core

比方说,我有一个电子邮件列表,如:

a@domain.com
b@domain.com
c@domain.com
d@sub.domain2.com
g@sub.domain2.com
x@gmail.com
y@analytics.gmail.com
z@yahoo.com
Run Code Online (Sandbox Code Playgroud)

我想获得之后的部分@,只获得一次(独特).

到目前为止我尝试了什么:

string[] campusCup(string[] emails)
{
    var hs = new HashSet<string>();

    var emailList = emails.Select(x => new { domain = x.Split('@')[1] })
                            .Where(x => hs.Add(x.domain) && Write(x.domain));

    return hs.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试调试它时,我的解决方案似乎没有选择任何东西.

And*_*rei 6

试试这个:

var domains = emails.Select(email => email.Split('@')[1]).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

  • ...或者如果你想忽略大小写(这是处理域名时通常要做的事情):`.Distinct(StringComparer.CurrentCultureIgnoreCase)` (3认同)