GetHashCode для сравнения и равенства - PullRequest
2 голосов
/ 06 апреля 2009

У меня есть программа, и я должен убедиться, что URL существует или нет, если он существует в базе данных, я должен выбрать идентификатор, если нет, я должен вставить его в базу данных.

У меня есть вопрос, является ли GetHashCode хорошим подходом для сохранения хеш-кода в базе данных и просто сравнения хеш-кодов? Могу ли я быть уверен, что нет исключений, если 2 или более URL имеют одинаковые хеш-коды, и если нет, отличается ли .NET Framework от установленного?

Спасибо

Ответы [ 4 ]

1 голос
/ 06 апреля 2009
  1. Не используйте готовый GetHashCode (), это неделя и может измениться в следующей версии.
  2. Используйте свою собственную функцию хеширования, используя SHA1 / SHA2 .
  3. Вам нужно разобраться с побегом, И.Е. 'A B' == 'A% 20B'
  4. Вам также нужно подумать, что делать с чувствительностью к регистру.
0 голосов
/ 06 апреля 2009

Если вы действительно хотите убедиться, что дубликатов не существует, просто сохраните URL. Единственное, что вы можете сделать с хэшем, это использовать его в качестве первого индикатора, если URL-адрес может существовать, но в основном вы выполняете индексацию вручную, в то время как хорошая БД может сделать это для вас.

Помимо того, как хранить его, существуют разные способы представления одного и того же URL-адреса в другой строке, поэтому неплохо было бы указать, насколько уникальными должны быть URL-адреса?

0 голосов
/ 06 апреля 2009

Не используйте его как идентификатор - GetHashCode может привести к одному и тому же значению для разных строк.

Результатом GetHashCode является int32, поэтому он может хранить только 4e9 различных значений. Поскольку число веб-страниц уже приблизительно соответствует этому значению (http://everything2.com/index.pl?node_id=1268366),, вы можете быть почти уверены, что несколько разных URL генерируют один и тот же хэш.

0 голосов
/ 06 апреля 2009

Нет, это не очень хорошая идея - потому что GetHashcode () может вернуть разные результаты в следующей версии .net Framework. см. msdn примечания

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...