C# 两个Dictionary列表交叉连接后合并为单个字典如何实现
实现方案
基础兼容版(支持所有.NET版本)
直接在SelectMany的结果投影逻辑中完成两个字典的合并,可自定义键冲突处理规则:
// 此处以Dictionary<string, object>为例,可替换为你实际使用的TKey/TValue类型 var mergedResult = list1.SelectMany(x => list2, (x, y) => { // 复制第一个字典的所有键值对到新字典 var merged = new Dictionary<string, object>(x); foreach (var kvp in y) { // 规则1:重复键时保留list2字典的值(覆盖逻辑,默认使用) merged[kvp.Key] = kvp.Value; // 规则2:重复键时保留list1字典的值(不覆盖,需注释规则1后启用) // if (!merged.ContainsKey(kvp.Key)) // merged.Add(kvp.Key, kvp.Value); // 规则3:重复键时直接抛出异常,需注释其他规则后启用 // merged.Add(kvp.Key, kvp.Value); } return merged; });
简洁版(仅支持C# 12 + .NET 8 及以上版本)
可以用集合展开语法直接合并,重复键默认以后面的y字典的值为准:
var mergedResult = list1.SelectMany(x => list2, (x, y) => new Dictionary<string, object>([..x, ..y]));
说明
最终返回的mergedResult类型为IEnumerable<Dictionary<TKey, TValue>>,每个元素都是合并完成的单个字典,无外层x/y包装,适配动态结构的字典场景。
内容的提问来源于stack exchange,提问作者RISHU GUPTA
相关产品推荐
相关产品推荐

