【问题标题】:Comparing two Key Value Dictionaries C#比较两个键值字典 C#
【发布时间】:2017-04-20 21:19:52
【问题描述】:

我有两本字典

1 具有字典 A(预期值)和字典 B。

它们都是字典,我想说,如果 B.Keys 包含来自 A 的键,则比较两个值并返回 true 或 false。

我该如何写这样的东西:

if (B.ContainsKey(A.Keys))
        {

        }

键值示例:

Dictionary<Key, Value> B = {name, "valueb"; last, "smith"}
Dictionary<Key, Value> A = {name, "valuea"; last, "smith"; middle, "m"}

if (name == name) 
{
 if("valueb" == "valuea" )
{
 return false;
}
}

【问题讨论】:

  • if(list1.Any(list2.Contains))
  • 是否要比较所有键,并且仅在所有匹配键的值都匹配时才返回 true?或者你只是想比较一个特定的键?
  • @RufusL 我想比较几个键,如果它们的值匹配,则返回 true。
  • “一些”是什么意思?您是指它们,还是有要比较的键列表?
  • 另外,您的字典定义是什么样的(键的类型和值的类型)?

标签: c# dictionary


【解决方案1】:

扫描一本字典并在第二个中查找并像这样进行比较:

var a = new Dictionary<TK,TV>();
var b = new Dictionary<TK,TV>();

var isEquals = a.All(x =>
{
    TV v;
    if (b.TryGetValue(x.Key, out v))
       return x.Value.Equals(v);

    return false;
});

UPD

isEquals = true;
foreach(x in a)
{
    TV v;
    if (b.TryGetValue(x.Key, out v))
       isEquals = isEquals && x.Value.Equals(v);
    else
    {
       isEquals = false;
       break;
    }

}

【讨论】:

  • 还有其他选项可以使用吗?当一个值不相等时,循环停止,我希望它继续通过其余的。我知道 Any 会在第一个 Value.Equal 处停止,但我希望它仍然继续。
  • @epv,是的,它可以被重写为循环,任何最低要求都是 a 完全等于 b。我更新了答案
  • 谢谢@gabba,我还没有看到更新,所以可能需要一些时间。
  • foreach(KeyValuePair x in a) string v; if (b.TryGetValue(x.Key, out v)) { if (x.Value.ToLower() == v.ToLower()) { match = true;} else {match = false} } else {match = false } 返回匹配; });只查看第一个元素。
  • @epv,因为您在循环的最后一行返回。你必须正确地重写循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
相关资源
最近更新 更多