我有一个 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/