Решение одно: использовать заданное равенство.
Если словари имеют разные размеры, вы знаете, что они неравны.
Если они имеют одинаковый размер, тогда создайте изменяемый хэш-набор ключей из одного словаря. Удалите из него все ключи из другого словаря. Если вы попытались удалить ключ, которого там не было, наборы ключей не одинаковы, и вы знаете, какой ключ был причиной проблемы.
В качестве альтернативы, создайте два набора хешей и возьмите их пересечение результирующее пересечение должно быть размером с исходные множества.
Это занимает O (n) время и O (n) пространство.
Как только вы узнаете, что наборы ключей равны, просмотрите все ключи по одному, извлеките значения и сравните их. Поскольку значения являются последовательностями, используйте SequenceEquals. Это занимает O (n) время и O (1) пространство.
Решение второе: сортировка ключей
Опять же, если словари имеют разный размер, вы знаете, что они неравны.
Если они имеют одинаковый размер, отсортируйте оба набора ключей и выполните для них SequenceEquals; если последовательности клавиш неравны, то словари неравны.
Это занимает O (n lg n) времени и O (n) пространства.
Если это удастся, то, снова, пройдитесь по клавишам по одному и сравните значения.
Решение третье:
Опять же, проверьте словари, чтобы увидеть, имеют ли они одинаковый размер.
Если это так, переберите ключи одного словаря и проверьте, существует ли ключ в другом словаре. Если это не так, то они не равны. Если это так, то проверьте соответствующие значения на равенство.
Это O (n) во времени и O (1) в пространстве.
Как выбрать среди этих возможных решений? Это зависит от того, какой режим вероятного сбоя, и нужно ли вам знать, что такое отсутствующий или дополнительный ключ. Если вероятный режим сбоя является плохим ключом, то может быть более целесообразным выбрать решение, которое концентрируется на поиске плохого ключа в первую очередь и проверяет только плохие значения, если все ключи оказываются в порядке. Если вероятный режим сбоя является плохим значением, то третье решение, вероятно, лучше, так как оно устанавливает приоритеты проверки значений на ранней стадии.