0

我有一个字符串列表,我想在其中找到特定值并返回。如果我只想搜索,我可以使用 Hashset 而不是列表

 HashSet<string> data = new HashSet<string>();    
 bool contains = data.Contains("lokendra"); // 

但是对于我正在使用的列表,Find因为我也想从列表中返回值。我发现这种方法很耗时。此代码所在的方法是hit more than 1000 times,列表的大小是20000 to 25000appx。这种方法需要时间。有没有其他方法可以使搜索更快。

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

我有这个结构的列表,如果名称属性与值“lokendra”匹配。那么我想重新运行整个对象。考虑将列表作为员工数据。

我想知道我们使用 Hashset 获得更快搜索的方式,无论如何,我们可以搜索数据并快​​速返回,而不是 find。

4

2 回答 2

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代替,一个具有属性而不是公共字段的...

于 2013-04-04T11:58:37.250 回答
0

您可以尝试使用employeeData.FirstOrDefault(e => e == "lokendra"),但它仍然需要遍历集合,因此会有性能列表Find方法。

如果您的列表内容仅设置一次,然后您一次又一次地搜索它,您应该考虑实施您自己的解决方案:

  • 首次搜索前排序列表
  • 使用二分搜索(对于标准和,这将是O(log n)而不是O(n)FindWhere
于 2013-04-04T11:53:25.200 回答