Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表查找、哈希集或Linq列表中哪个更好_Linq_List_C# 3.0 - Fatal编程技术网

列表查找、哈希集或Linq列表中哪个更好

列表查找、哈希集或Linq列表中哪个更好,linq,list,c#-3.0,Linq,List,C# 3.0,我有一个字符串列表,我想在其中找到特定的值并返回。 如果我只想搜索,我可以使用Hashset而不是list HashSet<string> data = new HashSet<string>(); bool contains = data.Contains("lokendra"); // 我们是否有任何linq或任何其他方法可以使检索数据的速度更快。 请帮忙 public struct Employee { public str

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

 HashSet<string> data = new HashSet<string>();    
 bool contains = data.Contains("lokendra"); // 
我们是否有任何linq或任何其他方法可以使检索数据的速度更快。 请帮忙

 public struct Employee
    {
        public string role;
        public string id;
        public int salary;
        public string name;  
        public string address;          
    }

我有这个结构的列表,如果name属性与“LokDra”值匹配,那么我想重整整个对象。把列表看作是雇员数据。< /P>


我想知道我们有Hashset来加快搜索速度的方法,我们可以搜索数据并快速返回,而不是查找。

您可以尝试使用
employeeData.FirstOrDefault(e=>e==“lokendra”)
,但它仍然需要在集合上迭代,因此将有性能列表
find
方法

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

  • 第一次搜索前对列表进行排序
  • 使用二进制搜索(对于标准的
    Find
    Where
    ,它将是O(logn)而不是O(n))

您可以尝试使用
employeeData.FirstOrDefault(e=>e==“lokendra”)
,但它仍然需要在集合上迭代,因此将有性能列表
Find
方法

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

  • 第一次搜索前对列表进行排序
  • 使用二进制搜索(对于标准的
    Find
    Where
    ,它将是O(logn)而不是O(n))
听起来你真正想要的是一本
字典。构建一次,您就可以多次高效地查询它。您可以轻松地从员工列表中构建它:

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
类型。您几乎肯定想要一个
类,一个具有属性而不是公共字段的类。

听起来您实际上想要的是一个
字典。构建一次,您就可以多次高效地查询它。您可以轻松地从员工列表中构建它:

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
类型。您几乎肯定想要一个
类,一个具有属性而不是公共字段的类。

您所说的“我还想从列表中返回值”是什么意思?你知道这个值——你正在检查它,所以它总是“lokendra”。请澄清你的问题。@Jon Skeet。我想从列表中找出列表是否包含值,实际上它是一个对象列表,因此如果name属性匹配,那么我将返回整个对象。这完全改变了问题的性质。您的实际情况与您描述的不匹配。只是想知道我的案例中的性能,不想发布项目中的代码,所以采用了简单的类似场景。对不起,乔恩·斯基特,但问题是这不一样。在您的问题中描述的情况下,
HashSet
就可以了。您所说的“我也想从列表中返回值”是什么意思?你知道这个值——你正在检查它,所以它总是“lokendra”。请澄清你的问题。@Jon Skeet。我想从列表中找出列表是否包含值,实际上它是一个对象列表,因此如果name属性匹配,那么我将返回整个对象。这完全改变了问题的性质。您的实际情况与您描述的不匹配。只是想知道我的案例中的性能,不想发布项目中的代码,所以采用了简单的类似场景。对不起,乔恩·斯基特,但问题是这不一样。在你问题中描述的情况下,
HashSet
就可以了。你是对的MarcinJuraszek。。我试过了,但性能是一样的。@MarcinJuraszek。实际上我有一个对象列表。如果一个属性与传递给它的值匹配,那么将返回整个对象。好的,但是,您的列表内容在搜索之间会发生变化吗?我有一个列表,如果在lis中找不到数据,则会添加内容,还有一个场景是,仅在列表中进行搜索。这两个场景都是不同的列表。您是对的MarcinJuraszek。。我试过了,但性能是一样的。@MarcinJuraszek。实际上我有一个对象列表。如果一个属性与传递给它的值匹配,那么将返回整个对象。好的,但是,您的列表内容在搜索之间会发生变化吗?我有一个列表,如果在lis中找不到数据,则会添加内容,还有一个场景,即仅在列表中进行搜索。这两个列表都是不同的。我可以同时匹配姓名和id吗?因为可能有两名员工的姓名相同。怎么做?@lokendrajayaswal:我不去在细化需求的同时不断更新我的答案。我建议你删除这个问题,然后问一个新的问题和你的所有要求。。。否则它就是毫无意义的。我尝试删除此项。但不起作用,但您的第一个答案满足我的要求,在其他情况下,我只想检查列表是否包含数据库中的表名。现在速度非常快。。将在同一个问题上提出新问题。@Jon Skeet先生我已经发布了该问题,请帮助。我可以匹配这两个问题吗姓名和id,因为可能有两个同名的员工。如何做到这一点?@lokendrajayaswal:我不会在你细化需求时不断更新我的答案。我建议你删除这个问题,然后问一个新的问题和你的所有要求。。。否则它就是毫无意义的。我尝试删除此项。但不起作用,但您的第一个答案满足了我的要求。在其他情况下,我只想检查列表是否包含来自数据库的表名。现在速度非常快。我将在同一个问题上提出新问题。@Jon Skeet先生我已经发布了该问题,请帮助。