我有一个非常简单的方法来比较两个列表,然后将第一个列表中的值分配给第二个列表,如下所示:
private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
foreach (var item in items)
{
foreach (var trItem in filteredProducts)
{
if (item.ItemID == trItem.ID)
{
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
}
}
}
}
然而,当在大型集合上执行此类操作时,比如说比较集合,其中每个列表中包含50000个项目,这里执行的时间是30000毫秒(30秒)...这会极大地影响性能,所以我想知道比较两个列表的最快方法是什么,然后分配我之前的例子中所显示的我所写的值?
有人能帮助我吗?
P.S。我可以为此使用IEqualityComparer吗?
@Stephen你的意思是这样的:
private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
foreach (var item in items)
{
foreach (var trItem in filteredProducts)
{
if (item.ItemID == trItem.ID)
{
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
}
break;
}
}
}
答案 0 :(得分:4)
将所有项目加载到具有常量查找的数据结构中。然后执行你的循环。
private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
var itemsDict = items.ToDictionary(i => i.ItemID, i => i);
foreach (var trItem in filteredProducts)
{
zsp_select_UserItems_Result item;
if (itemsDict.TryGetValue(trItem.ID, out item)) {
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
{
}
}