查找/匹配一个列表中另一个列表中每个项目的高效方法

时间:2020-08-11 15:57:56

标签: c# .net .net-core asp.net-core-3.1

我有两个单独但又相关的类的两个列表。

class A
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
}
class B
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
}

对于List<A>中的每个项目,我需要在A.Id == B.Id中找到其对应项(List<B>),如果存在,然后从{{1}更新A.Name }。

我知道如何轻松地做到这一点。例如:

B.Name

这当然很慢。我认为O(n * m)?我正在处理每个列表中的几百万条记录。我在寻找更好的答案,但是还没有遇到任何直接适用的答案。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

使用字典的示例:

注意:您的原始示例的a。当在b列表中找不到匹配项时,名称设置为NULL:

var bDictionary = bList.ToDictionary(b => b.Id);

foreach (var a in aList)
{
    bDictionary.TryGetValue(a.Id, out var b);
    a.Name = b?.Name;
}
相关问题