C# 使用Linq减去两个数组
我有以下类型的两个数组arr1和arr2C# 使用Linq减去两个数组,c#,linq,C#,Linq,我有以下类型的两个数组arr1和arr2 class Data { public int IdProduct; public double Price; } 我需要将arr2的价格减去arr1,但是数组的项目是不同查询的结果,因此arr1中的产品数量不一定与arr2中的产品数量匹配,并且数组中没有重复的产品。 我需要在每个数组中逐积进行减法运算,即 var total = from a1 in arr1 join a2 in arr2 on a1.IdProducto equa
class Data
{
public int IdProduct;
public double Price;
}
我需要将arr2的价格减去arr1,但是数组的项目是不同查询的结果,因此arr1中的产品数量不一定与arr2中的产品数量匹配,并且数组中没有重复的产品。
我需要在每个数组中逐积进行减法运算,即
var total =
from a1 in arr1
join a2 in arr2 on a1.IdProducto equals a2.IdProducto
select new
{
Product = a1.IdProduct,
Price = a1.Price - a2.Price
};
您有两个总差价的
数据数组
基本上,这段代码将两个数组相加,然后进行减法运算。因此,总的工作量随着阵列的长度呈线性增长:O(n+m)
类似的情况
var q = from a in arr1
join b in arr2 on a.IdProduct equals b.IdProduct into c
from x in c.DefaultIfEmpty()
select new Data {
IdProduct = a.IdProduct,
Price = x == null ? a.Price : a.Price - x.Price
};
arr1 = q.ToArray();
你到底是什么意思?(arr2之和)-(arr1之和)?
var q = from a in arr1
join b in arr2 on a.IdProduct equals b.IdProduct into c
from x in c.DefaultIfEmpty()
select new Data {
IdProduct = a.IdProduct,
Price = x == null ? a.Price : a.Price - x.Price
};
arr1 = q.ToArray();
var result = arr1.Concat(arr2)
.GroupBy(d => d.IdProduct)
.Select(x => new Data
{
IdProduct = x.Key,
Price = x.Select((y,i) => i == 0 ? y.Price : -y.Price).Sum()
}).ToList();