4

2つの辞書を比較していますが、または他の辞書のすべてのキーのセットが必要ですが、両方は必要ありません(順序は関係ありません)。これにはキーのみが含まれるため、辞書のキーのIEnumerablesを使用してこれを行うことができます。

2つのパスを含む簡単な方法:

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

例外はリストが完全に異なることを保証するので、私たちは連結することができます。

しかし、私はそれを行うためのより良い、しなやかな方法があると感じています。

4

1 に答える 1

3

私は非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);    
}
于 2013-02-05T13:14:55.377 に答える