如何优化不同长度的嵌套for循环?
Posted
技术标签:
【中文标题】如何优化不同长度的嵌套for循环?【英文标题】:How to optimize the nested for loop with different lengths? 【发布时间】:2021-11-10 13:27:45 【问题描述】:我需要在 c# 中使用 LINQ 或 Zip 优化 2 个嵌套的 for 循环,因为这段代码需要一些时间来加载。
这两个列表加载了api调用
List<OrderIncidentsDto> orderDtos = new List<OrderIncidentsDto>();
List<OrderItemDto> orderItemDtos = new List<OrderItemDto>();
我正在尝试使用两个嵌套的 for 循环来迭代这些数据
for (int incidents = 0; incidents < orderDtos.Count; incidents++)
var oItems = new List<OrderItemDto>();
for (int items = 0; items < orderItemDtos.Count; items++)
if (orderItemDtos[items].IncidentNumber == orderDtos[incidents].OrderIncidentName)
oItems.Add(orderItemDtos[items]);
orderDtos[incidents].OrderItems = oItems;
请建议我减少代码行数或摆脱多个循环的最佳方法。
【问题讨论】:
运行需要多长时间?每个列表中有多少项(不要猜测)? 请分享minimal reproducible example。 看看Grouped Joins 【参考方案1】:您当前代码的时间复杂度为 O(n^2)
,这可以通过首先通过 IncidentNumber
对 orderItemDtos
进行索引,然后在 orderDtos
上循环选择他们的订单项来减少到 O(n)
var orderItemLookup = orderItemDtos.ToLookup(x => x.IncidentNumber);
orderDtos.ForEach(order => order.OrderItems = orderItemLookup[order.OrderIncidentName]);
【讨论】:
以上是关于如何优化不同长度的嵌套for循环?的主要内容,如果未能解决你的问题,请参考以下文章