【发布时间】:2016-12-31 05:55:39
【问题描述】:
我有以下列表:
RakeSnapshots, ProductMovements
目的是对两者进行处理,得到符合条件的元素个数,如下:
考虑
RakeSnapshots和StatusCode == "Dumping"考虑
ProductMovement和Status == "InProgress"- 获取两个列表中满足
RakeSnapshots.RakeCode等于ProductMovements.ProductCode条件的所有元素的count
以下是我目前的选择:
// 代码1:
var resultCount = ProductMovements.Where(x => RakeSnapshots
.Where(r => r.StatusCode == "Dumping")
.Any(y => y.RakeCode == x.ProductCode &&
x.Status == "InProgress"))
.Count();
// 代码2:
var productMovementsInprogress = ProductMovements.Where(x => x.Status == "InProgress");
var rakeSnapShotsDumping = RakeSnapshots.Where(r => r.StatusCode == "Dumping");
var resultCount = productMovementsInprogress.Zip(rakeSnapShotsDumping,(x,y) => (y.RakeCode == x.ProductCode) ? true : false)
.Where(x => x).Count();
挑战是两个代码都是O(n^2)复杂度,有没有办法改进它,如果数据很大,这会伤害
【问题讨论】:
-
RakeSnapshots - RakeCode equal to ProductMovements - ProductCode是什么意思? -
我们可以将
RakeCode与ProductCode进行比较,如问题中的示例所示。已编辑,出现复制粘贴错误 -
第二个变体不等同于第一个。第一个是否返回预期结果?
-
你的意思是
RakeSnapshots.RakeCode equal to ProductMovements.ProductCode吗?因为RakeSnapshots - RakeCode equal to ProductMovements - ProductCode意味着某种减法。 -
@Matthew Watson 为这种混乱道歉,
RakeCode属于RakeSnapshots实体,ProductCode属于ProductMovements,你理解正确
标签: c# algorithm linq data-structures