C#在对象内合并字典

Posted

技术标签:

【中文标题】C#在对象内合并字典【英文标题】:C# Merging dictionaries inside of an object 【发布时间】:2021-11-28 12:15:04 【问题描述】:

我知道有很多关于这个主题的帖子,但我仍然没有找到我想要阅读的答案。

我得到两个对象 A 和 B,它们都有一个字典和一组布尔值。字典的形状相同,只是数据不同。我的最终目标是创建第三个对象 C,A 的副本,其字典根据一组规则更新为具有来自 A 和 B 的值(例如,如果 A,C.dictionary 将具有所有 A.dictionary.[x] .Dictionary.[x].Value.days 5)。 如果您对此有一个很棒的解决方案,否则,这就是我所处的位置和失败的位置:

我正在尝试创建一个新字典并循环遍历 A 和 B 以添加值...我将在之后添加规则。一旦我有了它,我会找到一种方法将这个字典放入对象 C 中。(告诉我是否过度设计,我对 C# 很陌生)。

var dict = new Dictionary<DateTime, TypeData>();
foreach (var item in A.dictionary.keys)
   
      dict.Add(A.Dictionary[item]);
   

这不起作用有两个原因:

item 确实代表 A.dictionary[x].key 而不是 A.dictionary[x](还包含 value 和非公共成员) “添加”带有下划线并且不显示错误的更多信息

非常感谢您查看我的帖子!

【问题讨论】:

您的 Add 错误,因为它缺少密钥。你需要做:dict.Add(item, A.Dictionary[item])。您可能需要一些键检查并将 var 项重命名为键以提高可读性 检查 documentation 的 Add 方法。 毫无疑问,Visual Studio 会告诉您在划线时会遇到什么问题。只需将鼠标悬停在它上面,它就会告诉您您的 add 调用不适合该方法的已知签名。它会向您显示有效的签名,并且它需要 2 个参数。 非常感谢,我可以通过循环遍历 keyvaluepair 并添加 kvp.key 和 kvp.Value 来做到这一点。 【参考方案1】:

试试这个

var dictionariesToCombine = new Dictionary<DateTime, TypeData>[] dictA,dictB;

Dictionary<int, int> dictC = new Dictionary<DateTime, TypeData>();

    for (var i=0; i< dictionariesToCombine.Length; i++)
    
        foreach (var item in dictionariesToCombine[i])
        
            if( 
                  (i==0 and your conditions)
                 || (i==1 and your conditions)
               )
            resultDict.Add(item.Key, item.Value);
        
    
    

【讨论】:

非常感谢 Serge,这行得通! @V1ct0r6l0r1eux 不客气!如果有帮助,请不要忘记接受答案。您可以通过单击我的答案旁边的复选标记来完成。

以上是关于C#在对象内合并字典的主要内容,如果未能解决你的问题,请参考以下文章

python3 列表内多个字典 相同项目 值计算合并

Python字典相同值的键合并

Lodash合并数组与字典对象键值

合并具有相同属性值的json对象c#

C#合并来自父级对象列表的子对象列表

Python-追加/合并字典列表