【问题标题】:Getting a list of unique domains from email list从电子邮件列表中获取唯一域列表
【发布时间】:2018-12-08 16:22:08
【问题描述】:

例如,我有一个电子邮件列表,例如:

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

我想获得@ 之后的部分,并且只获得一次(唯一)。

到目前为止我所尝试的:

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

当我尝试调试时,我的解决方案似乎没有选择任何内容。

【问题讨论】:

  • 为什么不使用 Distinct() linq 方法。 : var emailList = emails.Select(x => x.Split('@').Last()).Distinct();

标签: c# .net linq .net-core


【解决方案1】:

试试这个:

var domains = emails.Select(email => email.Split('@')[1]).Distinct().ToList();

【讨论】:

  • 太完美了!不知道我可以用 LINQ 做到这一点。谢谢你的帮助。如果您可以提供帮助,只是一个额外的问题,如果没有也没关系。这种方法会影响大型数据集的性能吗?
  • ...或者如果你想忽略大小写(这是处理域名时通常要做的事情):.Distinct( StringComparer.CurrentCultureIgnoreCase)
  • @user9248102 性能还不错。我认为没有其他方法可以显着提高性能。
  • @user9248102 行花费几纳秒。多少是几乎无法猜测的,取决于许多不同的因素。
  • 感谢您的帮助,不胜感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多