C# 执行从一个列表中查找/匹配另一个列表中的每个项目的方法

C# 执行从一个列表中查找/匹配另一个列表中的每个项目的方法,c#,.net,.net-core,asp.net-core-3.1,C#,.net,.net Core,Asp.net Core 3.1,我有两个单独但相关的类的列表 class A { public int Id { get; set; } public string Name { get; set; } ... } 对于列表中的每个项目,我需要在列表中找到其对应项(A.Id==B.Id),如果它存在,然后从B.Name更新A.Name 我知道如何很容易做到这一点。例如: List<A>.ForEach(a => { a.Name = List<B>.FirstOr

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

class A
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
}
对于
列表
中的每个项目,我需要在
列表
中找到其对应项(
A.Id==B.Id
),如果它存在,然后从
B.Name
更新
A.Name

我知道如何很容易做到这一点。例如:

List<A>.ForEach(a =>
{
    a.Name = List<B>.FirstOrDefault(b => b.Id == a.Id)?.Name;
});
List.ForEach(a=>
{
a、 Name=List.FirstOrDefault(b=>b.Id==a.Id)?.Name;
});

当然,这是非常缓慢的。我想是O(n*m)?我要处理每个列表中的数百万条记录。我一直在寻找更好的答案,但还没有找到任何直接适用的答案。感谢您的帮助

使用字典的示例:

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


字典或哈希集将提供更快的查找(
O(1)
)@RufusL如果这样执行查找,会不会将其减少到O(n)?不知道我是怎么做到的。。。谢谢这是O(n),或者至少非常接近,对吧(除了
.ToDictionary
操作)?由于我们仍然必须遍历
列表中的每个项,但是查找应该接近O(1)?列表B被迭代以构建字典。列出要进行查找的迭代列表。查找是O(1)。
List<A>.ForEach(a =>
{
    a.Name = List<B>.FirstOrDefault(b => b.Id == a.Id)?.Name;
});
var bDictionary = bList.ToDictionary(b => b.Id);

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