一个或另一个列表中的一组值,但不能同时包含这两个值

本文关键字:但不能 两个 包含这 一个 另一个 列表 一组 | 更新日期: 2023-09-27 17:57:49

我正在区分两个字典,我想要或或其他字典中的所有键的集合,但不是两者都要(我不在乎顺序)。由于这只涉及密钥,我们可以使用字典的密钥的IEnumerables来实现这一点。

简单的方法,包括2次通过:

return first.Keys.Except(second.Keys).Concat(second.Keys.Except(first.Keys));

我们可以concat,因为Excepts保证列表将完全不同。

但我感觉有一种更好的、灵活的方法可以做到这一点。

一个或另一个列表中的一组值,但不能同时包含这两个值

我更喜欢非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);    
}
相关文章: