У меня есть следующие две строки:Создание уникальных хэш-код на основе строки
var string1 = "MHH2016-05-20MASTECH HOLDINGS, INC. Financialshttp://finance.yahoo.com/q/is?s=mhhEDGAR Online FinancialsHeadlines";
var string2 = "CVEO2016-06-22Civeo upgraded by Scotia Howard Weilhttp://finance.yahoo.com/q/ud?s=CVEOBriefing.comHeadlines";
На первый взгляд эти две строки различны, однако их хэш-код такой же, используя GetHashCode method
.
var hash = 0;
var total = 0;
foreach (var x in string1) //string2
{
//hash = x * 7;
hash = x.GetHashCode();
Console.WriteLine("Char: " + x + " hash: " + hash + " hashed: " + (int) x);
total += hash;
}
Итого в конце концов составляет 620438779 для обеих строк. Есть ли другой метод, который вернет более уникальный хеш-код? Мне нужно, чтобы хэш-код был уникальным на основе символов в строке. Хотя обе строки отличаются друг от друга, и код работает правильно, эти две строки так кажутся одинаковыми. Как я могу улучшить этот код, чтобы сделать его более уникальным?
Вы понимаете, не правда ли, что вы не можете гарантировать уникальный хэш-код для всех возможных строк? Хэш-код - 32 бит, что означает, что существует 4 миллиарда (и изменение) возможных значений. Каждая из двух строк имеет длину более 120 символов. Количество возможных 120-символьных строк, использующих 96 печатных символов ASCII, намного больше.Столкновения неизбежны. * В общем случае нет такого уникального хеш-кода *. Если сделать хэш-код больше, это уменьшит вероятность столкновения, но не устранит его. –
Ваш вопрос подразумевает, что вы пытаетесь использовать хэш-коды как уникальные идентификаторы. Это невероятно плохая идея и обречена на провал. Ответ @AlexD объясняет, почему. –
@JimMischel да, я знаю об этом сейчас, но спасибо –