gpt4 book ai didi

c# - 比较两个字典 (Dictionary>)

转载 作者:行者123 更新时间:2023-11-30 16:10:11 30 4
gpt4 key购买 nike

我需要检查是否有两个 Dictionary<string, List<string>> 类型的词典是相同的。到目前为止我有这个:

// dictionaries are already defined, so no parameters are required
private bool DictionariesEqual()
{
return dictionary1.SequenceEqual(dictionary2);
}

我假设这只检查键和值的顺序是否相同,这不是我想要的,因为顺序并不重要,重要的是每个键和值的名称

有没有办法检查字典中是否存在不相等的字符串,如果发现第一个不匹配的字符串,则返回 false?

编辑

感谢您的所有帮助,但仍然无法识别值(value)变化。

更具体地说,这是函数(感谢@juharr)以及我如何使用它:

private bool DictionaryContentChanged()
{
if(synonymDictionary.Count != temporaryDictionary.Count ||
synonymDictionary.Keys.Except(temporaryDictionary.Keys).Any() ||
!synonymDictionary.Join(
temporaryDictionary,
kvp => kvp.Key,
kvp => kvp.Key,
(kvp1, kvp2) => new
{
l1 = kvp1.Value,
l2 = kvp2.Value
})
.All(a => a.l1.Count == a.l2.Count && !a.l1.Except(a.l2).Any()))
return true;
return false;
{

我将它放入一个更新函数中,该函数以特定时间间隔重复检查更改:

void Update(int interval)
{
while(!this.IsDisposed)
{
Set.Timer(interval);

if(DictionaryContentChanged())
{
MessageBox.Show("Changes detected");
}
else
{
// move on
}
}
}

当我添加、删除或更改值时,没有任何反应。仅当更改 key 或更改 key.Count 时才会显示消息框。这可能与比较字典的功能有关?

请记住,每个 KeyValuePair 的值代表一个通用列表。

最佳答案

未测试,但我猜以下可能有效:

if (dictionary1.Count != dictionary2.Count) return false;
foreach (var kv in dictionary1) {
if (!dictionary2.ContainsKey(kv.Key) return false;

List list = dictionary2[kv.Key];
if (!list.Count != dictionary1[kv.Key].Count) return false;

foreach(var value in kv.Value) {
if(!list.Contains(value)) return false;
}
}
return true;

编辑:我添加了一些长度检查。

关于c# - 比较两个字典 (Dictionary<string, List<string>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26256464/

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