我有两个类,product 和 order,请看类属性blow
public class Product()
{
public int ProductId { get;set; }
public string ProductName { get;set; }
public List<Order> OrderList { get;set; }
}
public class Order()
{
public int OrderId { get;set; }
public int ProductId { get;set; }
public string OrderNumber { get;set; }
public string OrderDescription { get;set; }
}
我有一个单独的调用来从每个类中获取数据
var productList = ProductService.GetAllProductList();
var orderList = OrderService.GetAllOrderList();
我想在这里实现的是我想将订单列表对象分配给产品,我可以通过如下方式实现这一点
foreach(var product in productList)
{
var selectedOrderList = orderList.Where(x => x.ProductId = product.ProductId).ToList();
product.OrderList = selectedOrderList;
}
想象如果我的产品和订单有大量数据,它可能会导致一些性能问题。
这是因为我们在 orderList 中进行了不必要的查找,因为一些订单数据已经分配。
有没有更好的方法来实现这一目标?
最佳答案
It's because we are doing unnecessary lookup in orderList
我不会称它为不必要的,但可以肯定的是,由于 LINQ to Objects Where
方法的线性时间复杂度,它效率低下,导致处理算法复杂度为 O(N * M)。
因此您需要一个快速的替代方案,而最简单的标准(也是非常有效的基于哈希的实现)是构建和使用Order
lookup通过 ProductId
使用 ToLookup
方法,它将时间复杂度调整为 O(N + M):
var ordersByProductId = orderList.ToLookup(order => order.ProductId);
foreach (var product in productList)
product.OrderList = ordersByProductId[product.ProductId].ToList();
关于c# - 将列表中的项目分配给列表中的另一个项目的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43137306/