我正在区分两个字典,并且我想要 or 或其他字典中的所有键的集合,但不是两者(我不关心顺序)。由于这仅涉及键,我们可以使用字典键的 IEnumerables 来执行此操作。
简单的方法,涉及 2 次通行证:
return first.Keys.Except(second.Keys).Concat(second.Keys.Except(first.Keys));
我们可以连接,因为例外保证列表将完全不同。
但我觉得有一种更好、更灵活的方式来做到这一点。
我更喜欢非 LINQy 方式:
var set = new HashSet<KeyType>(first.Keys);
set.SymmetricExceptWith(second.Keys);
这是您的另一种(但不是更好的)LINQy方式:
var result = first.Keys.Union(second.Keys)
.Except(first.Keys.Intersect(second.Keys));
如果您正在寻找(可能)性能更高的东西:
var result = new HashSet<KeyType>();
foreach(var firstKey in first.Keys)
{
if(!second.ContainsKey(firstKey))
result.Add(firstKey);
}
foreach(var secondKey in second.Keys)
{
if(!first.ContainsKey(secondKey))
result.Add(secondKey);
}