【发布时间】:2012-08-15 09:26:09
【问题描述】:
我找不到具体的例子,所以我发布了这个问题。任何帮助表示赞赏。
我有两个大型通用列表,都包含超过 30 万个项目。
我正在循环第一个列表以拉回信息并即时为新列表生成一个新项目,但我需要在第二个列表中搜索并返回一个值,基于三个匹配条件,如果找到添加到列表中,但是您可以想象,执行 300k * 300k 次需要时间。
有什么方法可以更有效地做到这一点?
我的代码:
var reportList = new List<StocksHeldInCustody>();
foreach (var correctDepotHolding in correctDepotHoldings)
{
var reportLine = new StocksHeldInCustody();
reportLine.ClientNo = correctDepotHolding.ClientNo;
reportLine.Value = correctDepotHolding.ValueOfStock;
reportLine.Depot = correctDepotHolding.Depot;
reportLine.SEDOL = correctDepotHolding.StockCode;
reportLine.Units = correctDepotHolding.QuantityHeld;
reportLine.Custodian = "Unknown";
reportLine.StockName = correctDepotHolding.StockR1.Trim() + " " + correctDepotHolding.StockR2.Trim();
//Get custodian info
foreach (var ccHolding in ccHoldList)
{
if (correctDepotHolding.ClientNo != ccHolding.ClientNo) continue;
if (correctDepotHolding.Depot != ccHolding.Depot) continue;
if (correctDepotHolding.StockCode != ccHolding.StockCode) continue;
if (correctDepotHolding.QuantityHeld != ccHolding.QuantityHeld) continue;
reportLine.Custodian = ccHolding.Custodian;
break;
}
reportList.Add(reportLine);
}
【问题讨论】:
-
在对象中创建所有变量的哈希值并只检查这些,它必须运行得很快
-
数据的来源是什么?如果它是一个像样的数据库,那么这方面可能会更好。
-
更新了我的通用答案,详细介绍了如何在 linq 中执行外部联接