Подтвердить что ты не робот

Могу ли я сравнивать ключи двух словарей?

Используя С#, я хочу сравнить два словаря, чтобы быть конкретными, два словаря с одинаковыми ключами, но не одинаковые значения, я нашел метод Comparer, но я не совсем уверен, как его использовать? Есть ли способ, кроме итерации через каждый ключ?

Dictionary
[
    {key : value}
]

Dictionary1
[
    {key : value2}
]
4b9b3361

Ответ 1

Если все, что вы хотите сделать, это увидеть, отличаются ли ключи, но не знают, что они собой представляют, вы можете использовать метод расширения SequenceEqual в свойстве Keys для каждого словаря:

Dictionary<string,string> dictionary1;
Dictionary<string,string> dictionary2;
var same = dictionary1.Count == dictionary2.Count && dictionary1.Keys.SequenceEqual(dictionary2.Keys);

Если вам нужны фактические различия, примерно так:

var keysDictionary1HasThat2DoesNot = dictionary1.Keys.Except(dictionary2.Keys);
var keysDictionary2HasThat1DoesNot = dictionary2.Keys.Except(dictionary1.Keys);

Ответ 2

Вы можете получить набор ключей и проиндексировать его, если это поможет.

dictionary1.keys[0] == dictionary2.keys[5]

На самом деле я не уверен, указали ли вы его числом или если вы сделаете это с помощью самого ключа, попробуйте оба.

Ответ 3

Попробуйте это

public bool SameKeys<TKey, TValue>(IDictionary<TKey, TValue> one, IDictionary<TKey, TValue> two)
{
    if (one.Count != two.Count) 
        return false;
    foreach (var key in one.Keys)
    {
        if (!two.ContainsKey(key))
            return false;
    }
    return true;
}

Ответ 4

Вы можете пойти с этим (в зависимости от того, хотите ли вы пересечение или исключение):

Dictionary<int, int> dict1 = new Dictionary<int, int>();
Dictionary<int, int> dict2 = new Dictionary<int, int>();

IEnumerable<int> keys1ExceptKeys2 = dict1.Keys.Except(dict2.Keys);
IEnumerable<int> keys2ExceptKeys1 = dict2.Keys.Except(dict1.Keys);
IEnumerable<int> keysIntersect = dict1.Keys.Intersect(dict2.Keys);