No puedo encontrar un ejemplo específico de esto, así que estoy publicando la pregunta. Cualquier ayuda apreciada.Comparando dos grandes listas genéricas
Tengo dos grandes listas genéricas, ambas con más de 300K elementos.
Estoy recorriendo la primera lista para recuperar información y generar un nuevo elemento para una nueva lista sobre la marcha, pero necesito buscar dentro de la segunda lista y devolver un valor, basado en TRES criterios coincidentes, si se encuentra para agregar a la lista, sin embargo, como se puede imaginar, hacer esto 300k * 300k veces lleva tiempo.
¿Hay alguna forma de que pueda hacer esto de manera más eficiente?
Mi código:
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);
}
crear un hash de todos los VARs juntos en el objeto y sólo comprobar estos, debe correr rápido luego – EaterOfCode
¿Cuál es la fuente de los datos? Si se trata de una base de datos decente, podría ser mejor hacerlo de ese lado. –
Actualicé mi respuesta genérica con detalles sobre cómo realizar una combinación externa en linq – Arkiliknam