假设 3 个列表存在超过 500,000 条记录,我们需要执行一组操作(子集如下所示):
1) 检查列表一和列表二中的重复 id 并检索不同的 id,同时总结重复 id 的“ValuesA”并将结果放入列表中。让我们将此列表称为 list12。
2) 比较列表 3 list12 之间所有具有匹配 id 的值,并将结果打印到控制台。
3) 确保最佳性能。
这是我到目前为止所拥有的:
var list1 = new List<abc>()
{
new abc() { Id = 0, ValueA = 50},
new abc() { Id = 1, ValueA = 40},
new abc() { Id = 1, ValueA = 70}
};
var list2 = new List<abc>()
{
new abc() { Id = 0, ValueA = 40},
new abc() { Id = 1, ValueA = 60},
new abc() { Id = 3, ValueA = 20},
};
var list3 = new List<abc>()
{
new abc() { Id = 0, ValueA = 50},
new abc() { Id = 1, ValueA = 40},
new abc() { Id = 4, ValueA = 70},
};
1)借助此处 [链接][1] 的解决方案,我能够解决第 1 部分。
var list12 = list2.GroupBy(i => i.Id)
.Select(g => new
{
Id = g.Key,
NewValueA = g.Sum(j => j.ValueA),
});
2)我似乎无法从这部分正确获得完整的结果集。我可以获得匹配的帐号,也许有人知道比哈希集更快的方法,但我还需要每个列表中的 ValueA 以及匹配的帐号。
foreach (var values in list3.ToHashSet().Select(i => i.ID).Intersect(list12.ToHashSet().Select(j => j.UniqueAccount)))
{
Console.WriteLine(values) //prints matching account number
//?? how do I get ValueA with from both lists with this in the quickest way possible
}
3)我在网上阅读提高性能的唯一尝试是使用我在上面的尝试中看到的哈希集,但我可能做错了,有人可能有更好的解决方案