|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Добрый день. В документации метода GetHashCode() написано docs.microsoft.comIf two string objects are equal, the GetHashCode method returns identical values. However, there is not a unique hash code value for each unique string value. Different strings can return the same hash code. То есть разработчики не гарантируют одинакового результата на одинаковых строках. В принципе, я уже натолкнулся на это. Но очень нужен гарантированный результат. Может кто посоветует какую-то альтернативу? Ну и, конечно, подход должен быть достаточно быстрым. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 10:47 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Как-то искал в инете хэши для строк, лучшее что нашлось: Код: plaintext 1. 2. 3. 4. 5. 6.
Это на С, но под C# думаю несложно переписать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 10:56 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_NovichokТо есть разработчики не гарантируют одинакового результата на одинаковых строках.Это как раз гарантируется. Не гарантируется, что результат на разных строках будет разный (Т.е. две разные строки могут иметь одинаковый хеш). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 10:56 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
refreg, ну как бы ни было, но такой сценарий меня не устраивает ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:05 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichokrefreg, ну как бы ни было, но такой сценарий меня не устраивает непонятно, чем? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:25 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichokну как бы ни было, но такой сценарий меня не устраиваетА как ты собираешься в 2^32 вариантов впихнуть гораздо большее количество вариантов, представляемых строками, и чтобы все уникальные были??? Int32 не резиновый ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:31 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
pation, ну тем, что две разные строки будут иметь одинаковый хеш. Мне как раз нужна уникальность, что одна и та же строка будет иметь свой, уникальный, хеш, который не будет пересекаться с хешами других строк. Из-за этого поведения string.GetHashCode() у меня программа выдает неправильные результаты ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:32 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_NovichokМне как раз нужна уникальность, что одна и та же строка будет иметь свой, уникальный, хеш, который не будет пересекаться с хешами других строк.Тогда это просто НЕ будет хэшем. Твой вариант - это использовать в качестве хэша саму строку. _NovichokИз-за этого поведения string.GetHashCode() у меня программа выдает неправильные результатыЭто не из-за его поведения, а из-за твоего непонимания, для чего вообще нужен хэш ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:35 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichok, После проверки равенства хешей проверяются равенства строк. Равенство хешей - это необходимое, но не достаточное условие. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:37 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Shocker.Pro, Shocker.ProА как ты собираешься в 2^32 вариантов впихнуть гораздо большее количество вариантов, представляемых строками, и чтобы все уникальные были??? Int32 не резиновый ну я собственно и спрашиваю _NovichokМожет кто посоветует какую-то альтернативу? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:41 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Shocker.ProЭто не из-за его поведения, а из-за твоего непонимания, для чего вообще нужен хэш Для чего нужен хеш? мне он нужен, чтобы каким-либо образом идентифицировать строку, но не хранить в памяти сами строки, поскольку они могут быть очень длинными, при то, что сами строки нигде не используются ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:43 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_NovichokShocker.ProЭто не из-за его поведения, а из-за твоего непонимания, для чего вообще нужен хэш Для чего нужен хеш? мне он нужен, чтобы каким-либо образом идентифицировать строку, но не хранить в памяти сами строки, поскольку они могут быть очень длинными, при то, что сами строки нигде не используютсяПримерно так выглядит твой ответ: Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:52 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
есть только 1 алгоритм гарантирующий на 100% этот способ называется побитовое сравнение. других 100% способов не существует. В Dictionary для этого для каждого хеша может хранится больше 1го элемента на сколько я помню ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 11:56 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichokне хранить в памяти сами строки, поскольку они могут быть очень длинными А вы за машину сильно не переживайте. Пока нет оснований. Память кончилась? Есть СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:02 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
refreg, если они ни где не используются нафига они нужны? Сжимайте строки и сравнивайте их в сжатом виде. Если энтропия строки низкая, а размер большой, уровень сжатия может быть очень большим. Тем более, если они вам больше не нужны. Если высокая, то сжимать особо смысла нет конечно. Просто нужно хранить "таблицу" хеш сумм которая будет связана со строками и она должна быть один хеш ко многим строкам. Так вы сможете определить, что заданный хеш встречается только 1 раз и проверять побитно нет смысла. Если их более 1, нужно определить какая из строк равна, так же можно хранить несколько хешей, основанных на разных алгоритмах, вероятность того, что оба будут совпадать будет ничтожной или использовать алгоритмы большей битности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:07 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
refreg_Novichokпропущено... Для чего нужен хеш? мне он нужен, чтобы каким-либо образом идентифицировать строку, но не хранить в памяти сами строки, поскольку они могут быть очень длинными, при то, что сами строки нигде не используютсяПримерно так выглядит твой ответ: Код: c# 1. 2. 3.
за что я люблю отечественные форумы, что на них вместо ответа начинают рассказывать какие мы умные, и насколько тупой автор. на том же stackoverflow держатся как-то корректнее. Грустно из-за этого... Ну вот вы объясните, заем нужен хеш, а не топорами бросайтесь в ответ. Я вот не понимаю, зачем он нужен. Мне он нужен для определенных целей. Если я не прав и этот подход не соответствует моим ожиданиям, то для этого я и пришел на этот форум, чтобы совета испросить, а не знаний по народному творчеству и упражнений в остроумии ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:09 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichokмне он нужен, чтобы каким-либо образом идентифицировать строку, но не хранить в памяти сами строки, поскольку они могут быть очень длинными, при то, что сами строки нигде не используются Можешь MD5 посчитать или по моему алгоритму 20971320 в UInt64, так вероятность повтора будет меньше, чем у 32-битной GetHashCode(), но 100% гарантии дать невозможно без полного сравнения срок. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:12 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichokrefregпропущено... Примерно так выглядит твой ответ: Код: c# 1. 2. 3.
за что я люблю отечественные форумы, что на них вместо ответа начинают рассказывать какие мы умные, и насколько тупой автор. на том же stackoverflow держатся как-то корректнее. Грустно из-за этого... Ну вот вы объясните, заем нужен хеш, а не топорами бросайтесь в ответ. Я вот не понимаю, зачем он нужен. Мне он нужен для определенных целей. Если я не прав и этот подход не соответствует моим ожиданиям, то для этого я и пришел на этот форум, чтобы совета испросить, а не знаний по народному творчеству и упражнений в остроумии если вам надо знать, что такое хеш код и как он считается, вы так и спрашивайте, "Объясните мне, что такое хеш код и как он работает"? вы задали этот вопрос? нет, вы задали другой вопрос, вам на него дали ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:16 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Dima T, По поводу MD5 хеша уже думал, буду пробовать, все же лучше хранить строки поменьше ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:30 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:32 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Dima TКак-то искал в инете хэши для строк, лучшее что нашлось: Код: plaintext 1. 2. 3. 4. 5. 6.
Это на С, но под C# думаю несложно переписать. Лучшее по какому критерию? Родной код, по-моему, тоже вполне: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
_NovichokМне как раз нужна уникальность, что одна и та же строка будет иметь свой, уникальный, хеш, который не будет пересекаться с хешами других строк. Это в приниципе невозможно - совокупность различных вариантов типа string является множеством, стремящимся к бесконечности, и ни одна хэш-функция к этой бесконечности не приблизится. Если принять как компромисс определенный процент коллизий, то берите любой криптохэш. SHA-256, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:35 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_Novichok за что я люблю отечественные форумы, что на них вместо ответа начинают рассказывать какие мы умные, и насколько тупой автор. на том же stackoverflow держатся как-то корректнее. Грустно из-за этого... Ну вот вы объясните, заем нужен хеш, а не топорами бросайтесь в ответ. Я вот не понимаю, зачем он нужен. Мне он нужен для определенных целей. Если я не прав и этот подход не соответствует моим ожиданиям, то для этого я и пришел на этот форум, чтобы совета испросить, а не знаний по народному творчеству и упражнений в остроумииНу не надо, оскорбления и в мыслях не было. Просто ты не читаешь, что тебе пишут. Поставил перед собой цель, и ничего кроме этой цели не видишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:39 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
_NovichokНу вот вы объясните, заем нужен хеш, а не топорами бросайтесь в ответ. Я вот не понимаю, зачем он нужен. Можешь тут почитать _NovichokМне он нужен для определенных целей. Вероятность задвоения MD5 крайне мала, на миллиарде строк может пара попадется с одинаковым, но 100% гарантии нет что эта пара не окажется среди тысячи строк. Поэтому добавь в ТЗ пунктик что иногда прога может неправильно сработать и пользуйся. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:41 |
|
string.GetHashCode() - нужна альтернатива, гарантирующая результат
|
|||
---|---|---|---|
#18+
Dima T_NovichokНу вот вы объясните, заем нужен хеш, а не топорами бросайтесь в ответ. Я вот не понимаю, зачем он нужен. Можешь тут почитать До кучи: https://blogs.msdn.microsoft.com/ruericlippert/2010/07/04/109-2/ https://habrahabr.ru/post/188038/ ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2017, 12:45 |
|
|
start [/forum/topic.php?fid=20&fpage=36&tid=1399602]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 315ms |
total: | 453ms |
0 / 0 |