Dictionary.TryGetValue 和 List.Any 哪个更高效

问题描述 投票:0回答:1

我有一个情况,我必须找出元素是否属于列表或不在循环中。

执行此操作的直接方法是调用列表的

Any
方法,如下所示

public class Person
{
    public int Id { get; set;}
    public string Name { get; set;}
}

List<Person> persons = new List<Person>();

foreach(int personId in personIds)
{
    if(persons.Any(x => x.Id == personId))
    {
       // do something
    }
}

我看到开发人员使用的另一种方法是使用

Dictionary
并调用其
TryGetValue
方法,就像这样

Dictionary<int, Person> personLookup = new Dictionary<int, Person>();
foreach(int personId in personIds)
{
   if(personLookup.TryGetValue(personId, out var person))
   {
      // do something
   }
}

两者哪个效率更高?

c# dictionary ienumerable any trygetvalue
1个回答
0
投票

当您使用 List.Any 时 - 它会搜索集合以查找元素。所以这种搜索的复杂度是O(n)。 如果您使用字典,那么它使用 O(1) 搜索和访问每个特定元素的时间 - 所以它会快得多。

© www.soinside.com 2019 - 2024. All rights reserved.