【发布时间】:2013-09-17 22:37:14
【问题描述】:
假设存在超过 500,000 条记录的 3 个列表,我们需要执行一组操作(子集如下所示):
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) 借助此处 [link][1] 的解决方案,我能够解决第 1 部分。
var list12 = list2.GroupBy(i => i.Id)
.Select(g => new
{
Id = g.Key,
NewValueA = g.Sum(j => j.ValueA),
});
2) 我似乎无法从这部分正确获得完整的结果集。我可以获得匹配的帐号,也许有人知道除了哈希集之外的 faster 方式,但我还需要每个列表中的 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) 我唯一尝试通过在线阅读来提高性能是使用哈希集,正如我在上面的尝试中看到的那样,但我可能做错了,有人可能有更好的解决方案
【问题讨论】:
-
使用连接。这使您可以访问双方。
-
@usr:就是这样。谢谢
标签: c# performance linq