【发布时间】:2019-08-23 09:35:37
【问题描述】:
我正在尝试检查 c# 中的项目主列表与列表数组之间的区别。
不太确定如何以有效的方式构建此逻辑。
例子:
我的主清单是:var MasterOrderIDs = {1,2,3,4}
然后我有一个客户/订单对象,它存储客户 ID 及其订单 ID
CustomerID|OrderID
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
2 | 1
2 | 2
2 | 3
2 | 4
2 | 5
2 | 6
3 | 2
3 | 3
3 | 4
我想返回一个包含 CustomerID 和 OrderIDs 的数组,其中 MasterOrderIDs 的差异小于 2。
类似:
var OrderDifferences = new Dictionary<int, List<int>>();
所以对于客户/订单,我想退货:
{[1, [5]], [3, [1]}
这是因为对于 CustomerID 1,有一个 Order ID 5,小于 2 个差值。与 CustomerID 3 类似,有一个 Order ID 1,它出现在 MasterOrderIDs 中,并且差异小于 2。
如何创建这样的支票?
在现实生活场景中,我将拥有大数据,因此想知道什么是最有效的方法。
【问题讨论】:
-
只是为了说清楚 - 更改到底是什么意思?
-
我的意思是差异。所以 MasterOrderIDs = {1,2,3,4} 是我要检查每个客户 ID 及其订单的集合。所以 CustomerID 1 的 OrderID 为 {1,2,3,4,5}。因为 OrderID 为“5”,所以相差 1。
-
还有一个问题。您要处理的预期记录数是多少?我可以想到一些小的优化,但对于真正的表现,也许其他人需要回答。
-
客户/订单将有 300000 条记录。
-
在内存中执行此操作会耗费时间/资源。 TBH 我会尝试考虑一些可以在数据库服务器上执行繁重工作的解决方案,但无论如何我会在几分钟内发布答案,因此如果您决定在服务器端执行此操作,您可以将其用作起点。