我有一个字符串列表,我想找到特定的值并返回。 如果我只想搜索,我可以使用Hashset而不是列表
HashSet<string> data = new HashSet<string>();
bool contains = data.Contains("lokendra"); //
但是对于列表我正在使用Find
因为我想从列表中返回值。
我发现这个方法很耗时。此代码所在的方法是hit more than 1000 times
,列表大小为appx 20000 to 25000
。此方法需要时间。还有其他方法可以让搜索更快。
List<Employee> employeeData= new List<Employee>();
var result = employeeData.Find(element=>element.name=="lokendra")
我们是否有任何linq或任何其他方法可以更快地从搜索中检索数据。 请帮忙。
public struct Employee
{
public string role;
public string id;
public int salary;
public string name;
public string address;
}
我有这个结构的列表,如果name属性匹配值“lokendra”。那么我想重新整理整个object.Consider列表作为员工数据。
我想知道我们使用Hashset获得更快搜索的方式无论如何我们可以搜索数据并快速返回而不是查找。
答案 0 :(得分:3)
听起来实际上想要的是Dictionary<string, Employee>
。构建一次,您可以多次有效地查询它。您可以轻松地从员工列表中构建它:
var employeesByName = employees.ToDictionary(e => e.Name);
...
var employee;
if (employeesByName.TryGetValue(name, out employee))
{
// Yay, found the employee
}
else
{
// Nope, no employee with that name
}
编辑:现在我看到了你的编辑... 请不要像这样创建struct
类型。你几乎肯定想要一个class
,一个有属性而不是公共领域......
答案 1 :(得分:0)
您可以尝试使用employeeData.FirstOrDefault(e => e == "lokendra")
,但仍需要对集合进行迭代,因此将使用性能列表Find
方法。
如果您的列表内容只设置了一次,然后您一次又一次地搜索它,那么您应该考虑实施自己的解决方案:
Find
和Where
使用二进制搜索( O(log n)而不是 O(n) < / LI>