gpt4 book ai didi

c# - 在 C# 中使用 LINQ 比较字典

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:44 26 4
gpt4 key购买 nike

我需要比较两个字典并用不匹配的项更新另一个字典

两个字典很像

Dictionary<String, List<String>> DICTONE = new Dictionary<string, List<String>>();
Dictionary<string, List<String>> DICTTWO = new Dictionary<string, List<String>>();

内容

DICTONE["KEY1"]="A"
"B"
"C"

DICTONE["KEY2"]="D"
"E"
"F"

DICTTWO["KEY1"]="A"
"B"
"Z"

DICTTWO["KEY3"]="W"
"X"
"Y"

第三个字典有一个类实例作为值

Dictionary<String, MyClass> DICTRESULT = new Dictionary<string, MyClass>();

类就像

class MyClass
{
public List<string> Additional = null;
public List<string> Missing = null;

public MyClass()
{
Additional = new List<string>();
Missing = new List<string>();
}
public MyClass(List<string> p_Additional, List<string> p_Missing)
{
Additional = p_Additional;
Missing = p_Missing;
}
}

场景是

  1. 如果一个项目在 DICTONE 中而不在 DICTTWO 中,则将该项目添加到 RESULTDICT 中的 MISSING 列表中
  2. 如果一个项目在 DICTTWO 中而不在 DICTTONE 中,则将该项目添加到 RESULTDICT 中的附加列表

预期的答案是

DICTRESULT["KEY1"]=ADDITIONAL LIST ---> "Z"
MISSING LIST ---> "C"

DICTRESULT["KEY2"]=ADDITIONAL LIST ---> ""
MISSING LIST ---> "D"
"E"
"F"
DICTRESULT["KEY3"]=ADDITIONAL LIST ---> ""
MISSING LIST ---> "W"
"X"
"Y"

有没有办法使用 LINQ 来做到这一点

最佳答案

好吧,这是一个尝试,假设 firstsecond 是有问题的字典。

var items = from key in first.Keys.Concat(second.Keys).Distinct()
let firstList = first.GetValueOrDefault(key) ?? new List<string>()
let secondList = second.GetValueOrDefault(key) ?? new List<string>()
select new { Key = key,
Additional = secondList.Except(firstList),
Missing = firstList.Except(secondList) };
var result = items.ToDictionary(x => x.Key,
x => new MyClass(x.Additional, x.Missing));

请注意,这是完全未经测试的。我什至没有尝试编译它。它还需要一个额外的扩展方法:

public static TValue GetValueOrDefault<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key)
{
TValue value;
dictionary.TryGetValue(key, out value)
return value;
}

关于c# - 在 C# 中使用 LINQ 比较字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3234921/

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