You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个IEnumerable并按Id匹配更新集合对应字段值

实现方案

核心思路

  • 先将list2转换为以Id为键、对应完整条目为值的映射结构(字典/哈希表/Map),避免每次匹配全量遍历list2,性能更高
  • 遍历list1的所有条目,若当前条目Id存在于映射结构中,直接将映射中对应条目的同名字段值覆盖到list1的当前条目即可

C# 实现代码

首先定义实体类:

public class StudyItem
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Subject { get; set; }
}

处理逻辑:

// 将list2转为Id为键的字典
var list2Dict = list2.ToDictionary(item => item.Id);

// 遍历list1匹配更新
foreach (var item in list1)
{
    if (list2Dict.TryGetValue(item.Id, out var updateItem))
    {
        item.Name = updateItem.Name;
        item.Subject = updateItem.Subject;
        // 若有更多字段需要同步,在此处新增赋值逻辑即可
    }
}

Python 实现代码

假设列表元素为字典格式:

# 将list2转为Id为键的字典
list2_map = {item["Id"]: item for item in list2}

# 遍历list1更新
for item in list1:
    if item["Id"] in list2_map:
        update_data = list2_map[item["Id"]]
        item["Name"] = update_data["Name"]
        item["Subject"] = update_data["Subject"]

JavaScript 实现代码

// 将list2转为Id为键的Map结构
const list2Map = new Map(list2.map(item => [item.Id, item]))

// 遍历list1更新
list1.forEach(item => {
  if (list2Map.has(item.Id)) {
    const updateData = list2Map.get(item.Id)
    // 单个字段赋值写法
    item.Name = updateData.Name
    item.Subject = updateData.Subject
    // 多字段批量覆盖可以直接用:Object.assign(item, updateData)
  }
})

内容的提问来源于stack exchange,提问作者Raghavendra HG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:03