Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Исходники .NET Core FX, где там найти исходный код Task? Всё обыскал, нету https://www.cyberforum.ru/ csharp-net/ thread1525664.html
.NET Core FX клонировал себе, всё посмотрел, не нашёл. При том, что в некоторых библиотеках эти самые таски используются, но при попытке перейти к ним решарпер их декомпилит из установленного...
Awesomium не переходит по ссылке C#
Не переходит по ссылке.. Вот пример: http://screenshot.su/show.php?img=c8788fed514a64536754d5563cd9a4c6.jpg Все уже облазил, не могу найти решение
C# Что значит сделать обёртку?
Есть задание. public interface IActionProcessor<TActionId> where TActionId : IEquatable<TActionId> { int MaxActionsCount { get; } void RequestAction(<TActionId> actionId); ...
C# Упаковка программы на дельфи в exe-файл на c# Добрый день! Есть утилита exe, написанная на дельфи. Утилита действует следующим образом: при запуске с параметром виде пути к текстовому файлу утилита обрабатывает данный файл. Мне нужно... https://www.cyberforum.ru/ csharp-net/ thread1525137.html
C# WebBrowser.InvokeMember: обновление страницы вместо перехода по ссылке формы https://www.cyberforum.ru/ csharp-net/ thread1524904.html
При вызове InvokeMember для input type="image" происходит обновление страницы вместо перехода по ссылке формы. В чём проблема? HtmlElementCollection ContButtonCol =...
Альтернатива Invoke при изменении GUI с другого потока C#
Всем добрый день. Давно в приложениях для обращения из второстепенных потоков к главному использую Invoke... Всё бы хорошо, но не мне вам рассказывать, насколько он медленный. В реальном времени...
C# Считать текст из Word посредством Microsoft.Office.Interop.Word
Необходимо считать форматированный текст из Word посредством Microsoft.Office.Interop.Word. По большей части нужно не сколько само форматирование текста, сколько получить имя картинки, находящейся в...
C# Ошибка сериализации/десериализации Доброго времени суток. Пишу программу для передачи информации о компьютере по сети. Имеются 2 приложения (сейчас обы Windows Form, в последствии сервер будет переделан в службу Windows для... https://www.cyberforum.ru/ csharp-net/ thread1523909.html
C# Система проверки информации и антиплагиат, возможно ли? https://www.cyberforum.ru/ csharp-net/ thread1523896.html
Здравствуйте ребята! Скажите пожалуйста, возможно ли в C# реализовать программу, которая будет проверять на правильность информации ссылаясь на википедию (например) и чтобы проверял на антиплагиат...
C# CefSharp: как найти доступ к содержимому загруженной веб-страницы? Кто работал с CefSharp ChromeWebBrowser, не могу разобраться как найти доступ к содержимому загруженной Веб страницы и наличие соответствующих интерфейсов, таких как HTMLelement? Для примера, в... https://www.cyberforum.ru/ csharp-net/ thread1523893.html
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.09.2015, 17:33 0

Реализация интерфейса IEqualityComparer для HashSet<Dictionary<string, string>>

07.09.2015, 17:33. Показов 2399. Ответов 4
Метки (Все метки)

Лучший ответ Сообщение было отмечено Woldemar89 как решение

Решение

Woldemar89, всё плохо Приведение к строкам вообще печаль. Можно же сделать намного проще:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class DictionaryStrStrComparer : IEqualityComparer<Dictionary<string, string>>
{
 
    public bool Equals(Dictionary<string, string> first, Dictionary<string, string> second)
    {
        return GetHashCode(first) == GetHashCode(second);
    }
 
 
    public int GetHashCode(Dictionary<string, string> dictionary)
    {
        return dictionary.Aggregate(0, (current, pair) => current ^ ((pair.Key.GetHashCode()*397) ^ pair.Value.GetHashCode()));
    }
}
Добавлено через 6 минут
Можно для скорости даже распараллелить без проблем:
C#
1
2
3
4
5
6
7
8
9
public int GetHashCode(Dictionary<string, string> dictionary)
{
    return dictionary.AsParallel()
                     .Aggregate(() => 0,
                                (current, pair) =>
                                current ^ ((pair.Key.GetHashCode()*397) ^ pair.Value.GetHashCode()),
                                (x, y) => x ^ y,
                                x => x);
}
Добавлено через 1 минуту
Ой. А Equals у вас конечно жесть Существуют коллизии, а вы будете их считать одним и тем же...

итоговая реализация должна быть какой-то такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public class DictionaryStrStrComparer : IEqualityComparer<Dictionary<string, string>>
    {
 
        public bool Equals(Dictionary<string, string> first, Dictionary<string, string> second)
        {
            return first.SequenceEqual(second);
        }
 
 
        public int GetHashCode(Dictionary<string, string> dictionary)
        {
            return dictionary.AsParallel()
                             .Aggregate(() => 0,
                                        (current, pair) =>
                                        current ^ ((pair.Key.GetHashCode()*397) ^ pair.Value.GetHashCode()),
                                        (x, y) => x ^ y,
                                        x => x);
        }
    }


Вернуться к обсуждению:
Реализация интерфейса IEqualityComparer для HashSet<Dictionary<string, string>>
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2015, 17:33
Готовые ответы и решения:

Dictionary<string, Dictionary<string, string>>
Ребята тут есть силачи ? Мне нужно решить эту проблему static void Main(string args)...

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например,...

Разность множеств для Dictionaty<string, string>
Здравствуйте! есть два словаря Dictionary&lt;string, string&gt; fixBlockNormalizeStrings и...

Как архивировать Dictionary<string, Dictionary<string, decimal[,]>>
Программа периодически создает Dictionary&lt;string, Dictionary&lt;string, decimal&gt;&gt; большого размера....

__________________
4
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.