Bis*_*ana 7 .net c# dictionary
我对 C# 有点陌生,想要在比较两个字典时识别不具有相同值的键。
我的字典是dict => KeyValuePair<string, string>。我有两本字典,比如 -
dict1 => {"a":"False","b":"amazonaws.com","c":"True"}
dict2 => {"a":"True","b":"amazonaws.com","c":"False"}
Run Code Online (Sandbox Code Playgroud)
我想比较两个字典并返回一个具有键 ["a", "c"] 的变量,如上面的示例所示,这些键具有不同的值。
目前我编写的逻辑只会区分其他字典中不存在的键。
Dictionary dictExcept = null;
foreach (IDictionary kvp in dict1.Cast<object>().Where(kvp => !dict2.Contains(kvp)))
{
dictExcept.Add(kvp.Keys, kvp.Values);
}
return dictExcept ;
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用TryGetValue:
using System.Linq;
...
var dictExcept = dict1
.Where(pair => dict2.TryGetValue(pair.Key, out var value) &&
pair.Value != value)
.ToDictionary(pair => pair.Key,
pair => (first: pair.Value, second: dict2[pair.Key]));
Run Code Online (Sandbox Code Playgroud)
这里我们对每个键值pairfromdict1尝试获取对应的valuefrom dict2:
// dict2 has pair.Key it corresponds to value...
dict2.TryGetValue(pair.Key, out var value) &&
// however value from dict2 != value from dict1
pair.Value != value
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢使用,则完全相同的想法foreach(无Linq解决方案):
var dictExcept = new Dictionary<string, (string first, string second)>();
foreach (var pair in dict1)
if (dict2.TryGetValue(pair.Key, out var value) && value != pair.Value)
dictExcept.Add(pair.Key, (pair.Value, value));
Run Code Online (Sandbox Code Playgroud)
演示:(小提琴)
var dict1 = new Dictionary<string, string> {
{ "a", "False" }, { "b", "False" }, { "c", "True" }, { "d", "dict1 only" } };
var dict2 = new Dictionary<string, string> {
{ "a", "False" }, { "b", "True" }, { "c", "False" }, { "e", "dict2 only" } };
var dictExcept = dict1
.Where(pair => dict2.TryGetValue(pair.Key, out var value) &&
pair.Value != value)
.ToDictionary(pair => pair.Key,
pair => (first: pair.Value, second: dict2[pair.Key]));
string report = string.Join(Environment.NewLine, dictExcept
.Select(pair => $"Key: {pair.Key}; Values: {pair.Value}"));
Console.Write(report);
Run Code Online (Sandbox Code Playgroud)
结果:
Key: b; Values: (False, True)
Key: c; Values: (True, False)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |