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