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

如何优化C#中不同长度列表的嵌套for循环,可使用LINQ或Zip方法

C# 嵌套循环优化方案

前提说明

你提到的Zip方法是按两个序列的索引位置对位合并元素,不适用当前按关联键匹配一对多数据的场景,这里用LINQ的预分组方案实现最优性能。

原有嵌套循环时间复杂度为 O(n*m),数据量越大耗时越高。优化后整体时间复杂度降为 O(n+m),同时代码量大幅精简。


最优实现代码

步骤1:预构建关联键分组结构(仅遍历一次订单项列表)

用ToLookup方法将orderItemDtos按IncidentNumber预分组,后续查找匹配项的时间复杂度为O(1):

var itemLookup = orderItemDtos.ToLookup(item => item.IncidentNumber);

步骤2:批量给订单赋值关联订单项(仅遍历一次订单列表)

foreach (var order in orderDtos)
{
    order.OrderItems = itemLookup[order.OrderIncidentName].ToList();
}

极致精简写法(可选)

如果不需要复用分组结构,也可以用GroupJoin实现单流处理,功能完全等价:

orderDtos = orderDtos.GroupJoin(
    orderDtos: orderDtos,
    orderItemDtos: orderItemDtos,
    outerKeySelector: o => o.OrderIncidentName,
    innerKeySelector: i => i.IncidentNumber,
    resultSelector: (o, items) => 
    {
        o.OrderItems = items.ToList();
        return o;
    }).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:45:01