gpt4 book ai didi

Linq 与 sum 相交

转载 作者:行者123 更新时间:2023-12-04 06:10:29 25 4
gpt4 key购买 nike

我有两个要相交的集合,并对匹配元素执行求和运算。

例如集合是(在伪代码中):

col1 = { {"A", 5}, {"B", 3}, {"C", 2} }
col2 = { {"B", 1}, {"C", 8}, {"D", 6} }

期望的结果是:
intersection = { {"B", 4}, {"C", 10} }

我知道如何使用 IEqualityComparer匹配名称上的元素,但是如何在进行交集时对值求和?

编辑:

起始集合没有两个同名的项目。

最佳答案

假设您的输入数据如下所示:

IEnumerable<Tuple<string, int>> firstSequence = ..., secondSequence = ...;

如果字符串在每个序列中都是唯一的(即在任一序列中不能超过一个 {"A", XXX}),您可以 join像这样:
var query = from tuple1 in firstSequence
join tuple2 in secondSequence on tuple1.Item1 equals tuple2.Item1
select Tuple.Create(tuple1.Item1, tuple1.Item2 + tuple2.Item2);

您可能还想考虑使用 group by ,如果这种唯一性不成立,这将更合适:
var query = from tuple in firstSequence.Concat(secondSequence)
group tuple.Item2 by tuple.Item1 into g
select Tuple.Create(g.Key, g.Sum());

如果两者都不是您想要的,请更准确地说明您的要求。

编辑 :在您澄清这些是字典之后 - 您现有的解决方案非常好。这是 join 的另一种选择:
var joined = from kvp1 in dict1
join kvp2 in dict2 on kvp1.Key equals kvp2.Key
select new { kvp1.Key, Value = kvp1.Value + kvp2.Value };

var result = joined.ToDictionary(t => t.Key, t => t.Value);

或流利的语法:
var result = dict1.Join(dict2,
kvp => kvp.Key,
kvp => kvp.Key,
(kvp1, kvp2) => new { kvp1.Key, Value = kvp1.Value + kvp2.Value })
.ToDictionary(a => a.Key, a => a.Value);

关于Linq 与 sum 相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848894/

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