c# - 在 HashSet<string> 性能中搜索字符串

标签 c# .net c#-4.0

我有一个 HashSet<string>拥有约 5 万名成员。我有另一个对象列表,我正在逐个遍历以确定该对象的电子邮件是否存在。如果是这样,我需要对该对象执行一些操作。

var emailList = db.Emails.Select(s => s.EmailAddress.ToLower()).ToList();
var emailHash = new HashSet<string>(emailList);
var objects = db.Objects.ToList();
// everything is fine up to this point
foreach (var object in objects) {
   if (!emailHash.Any(s => s.Equals(object.Email))) { // This takes ~0.3s
      Console.WriteLine("Email: {0}", object.Email);     
   }
}

如何加快判断一个字符串是否存在于字符串列表中的速度?

最佳答案

您没有正确使用 HashSet。使用 Linq 的 .Any() 实际上会根据 HashSet 中存储的每个元素评估您的条件。

要搜索某个项目是否存在于 HashSet 中(具有常数时间,O(1)),请使用 emailHash.Contains(object.Email)

关于c# - 在 HashSet<string> 性能中搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38948665/

相关文章:

c# - 如何使用 WCF 发送用户凭据以在远程计算机上使用?

c# - 使用存储在另一个列表 (C#) 中的自定义顺序对列表 <> 进行排序?

c# - 为什么动态调用返回动态结果?

c# - 如何强制 .NET (C#) 使用方法的非泛型重载?

c# - 执行 client.SendAsync 时出现 HttpRequestException

c# - 将对象集合添加到另一个集合

C# - 检测混淆器

c# - 构造函数中的这种变化是否被允许?

c# - 为什么按回车键不会触发我的 Gtk.Entry 中的 KeyPressEvent?

c# - ASP.NET (C#) - 与 PHP