【问题标题】:How to optimize the nested for loop with different lengths?如何优化不同长度的嵌套for循环?
【发布时间】: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;
        }
    }
}

请建议我减少代码行数或摆脱多个循环的最佳方法。

【问题讨论】:

标签: c# performance linq for-loop .net-core


【解决方案1】:

您当前代码的时间复杂度为 O(n^2),这可以通过首先通过 IncidentNumberorderItemDtos 进行索引,然后在 orderDtos 上循环选择他们的订单项来减少到 O(n)

var orderItemLookup = orderItemDtos.ToLookup(x => x.IncidentNumber);
orderDtos.ForEach(order => order.OrderItems = orderItemLookup[order.OrderIncidentName]);

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多