Вопрос команде JB. <https://kotlinlang.org/api/lat...
# russian
l
Вопрос команде JB. https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/hash-code.html Any.hashCode() Я могу использовать это для кроссплатформенного сравнения строк?
i
Если между разными платформами, то не стоит. Мы не специфицируем (на данный момент) алгоритм расчета hashCode для строк в котлине. Максимум на что можно полагаться, что одинаковые строки будут иметь одинаковый хеш-код в пределах одного исполнения программы.
l
Какой есть быстрый способ сравнить строки кроссплатформенно (какой хеш или может что то у вас есть готовое)?
i
==
,
equals
l
Строки жирные, я не могу их таскать по сети.
e
Например можно так:
Copy code
str.fold(0) { a, c -> a * 31 + c.toInt() }
Так работает String.hashCode в Java. Константы можете поменять по вкусу.
l
@elizarov Спасибо
А там... 31 по какой то причине вроде было
e
Если будете менять множитель, то рекомендуется простое число использовать более 26. (для латинского алфавита)
31 было чтобы на старых процах быстро умножение работало (работает для любого множителя вида 2^N +/- 1)
На современных процах — в целом пофиг
l
Спасибо
i
Строки жирные, я не могу их таскать по сети.
Т.е. вместо строк хотите сравнивать их хеши? А что будет если совпадут — ведь непонятно будет, это равные строки или просто хеш-коллизия?
g
Если там какая-то DHT, то хэша хватит, чтобы отправить в нужный бакет и локально разрешить через equals. (вставил две копейки, условия задачи все равно не знаем)