gpt4 book ai didi

c# - 比较两个大列表并从另一个列表中分配属性值

转载 作者:行者123 更新时间:2023-11-30 20:27:33 26 4
gpt4 key购买 nike

我有一个非常简单的方法来比较两个列表,然后将第一个列表的值分配给第二个列表,如下所示:

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 秒)...这会影响性能太可怕了,所以我想知道比较两个列表然后分配值的最快方法是什么,就像我在我之前写的例子中展示的那样?

有人可以帮帮我吗?

附言伙计们,我可以为此使用 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;
}
}
}

最佳答案

将所有项目加载到一个数据结构中,并不断查找。然后执行循环。

private void FindUPC(List<ResultItem> filteredProducts, List<zsp_select_UserItems_Result> items)
{
var itemsDict = items.ToDictionary(i => i.ItemID);

foreach (var trItem in filteredProducts)
{
if (itemsDict.TryGetValue(trItem.ID, out var item)) {
trItem.UPC = item.UPC;
trItem.EAN = item.EAN;
trItem.MPN = item.MPN;
{
}
}

关于c# - 比较两个大列表并从另一个列表中分配属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48470258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com