Use*_*987 4 c# linq list iequalitycomparer c#-4.0
我编写了一个代码,该代码基本上比较了C#中的两个列表。第一个列表包含以下属性:
第一个列表缺少TotalViews的值,因此我从第二个列表中为它们分配了这些道具:
代码如下:
foreach (var item in parsedMerchantData)
{
var itemInB = HitCountItemIDS.FirstOrDefault(x => x.ItemID == item.ItemID);
if (itemInB != null)
{
if (itemInB.HitCount != -1)
{
item.TotalViews = itemInB.HitCount;
}
else
{
item.TotalViews = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何更有效的方式使用LINQ编写此代码或实现自定义比较器,该自定义比较器在有时包含100000个项目的较大列表上工作更快?
这就像jdweng的答案,但稍微简单一点,并且不会因缺少商品ID而引发异常:
var hitCountsById = HitCountItemIDS.ToDictionary(x => x.ItemID, x => x.HitCount);
foreach (var item in parsedMerchantData)
{
int hitCount;
// We don't care about the return value of TryGetValue here...
hitCountsById.TryGetValue(item.ItemID, out hitCount);
item.HitCount = hitCount == -1 ? 0 : hitCount;
}
Run Code Online (Sandbox Code Playgroud)
这应该是O(N + M),其中N是...的大小,HitCountItemIDs并且M是...的大小parsedMerchantData。因此,当数据变大时,它应该比合并排序方法增长得更慢,并且绝对是更简单的代码。(也不需要比较商品ID进行订购-只需相等即可。)