У меня практически всегда родительский ключ это ИД, а дочерний выдуманное мной число, как правило это 1, 2 ,3... или тип key. Возникает ничем не обоснованная тревога, что такой подход розбалансирует хештаблицу. Вопрос, стоит ли использовать шаг в простое число, например, 9973 типа 1*9973, 2*9973, 3*9973... ? Значений много, особенно в хештаблице для клеток в карте 256х256, это 65536 только родительских ключей =)
`
ОЖИДАНИЕ РЕКЛАМЫ...
16
Вплане разбалансирует? Юзай key просто да и всё. Или возможно я не понял вопроса.
18
Если ключ используешь как чей-то хендл ид, то там лучше не экспериментировать.
Если ключ как чисто свое значение юзаешь, то надо просто влезть в диапазон -2^31...2^31, где-то так вроде. Короче числа большие и со всякими сдвигами нормально все будет (в пределах разумного).
1
Я использую осмысленные ключи, а не волшебные числа.
Например:
-- Записываем в хеш урон способности для дальнейшего использования в обработчике таймера
call SaveUnitHandle(udg_hash, h, StringHash("spellDmg"), spellDmg);
Таким образом:
ключи всегда уникальны
проще ориентироваться в коде
Для оптимизации StringHash() используйте оптимизатор или программы по защите карты. Обычно они преобразуют вызовы StringHash() в числа
Другой практикой будет создание глобальных переменных как константы для часто используемых ключей.
В редакторе создаем переменную: HASH_SPELL_DMG с уникальным целочисленным значением
Получаем:
-- Записываем в хеш урон способности для дальнейшего использования в обработчике таймера
call SaveUnitHandle(udg_hash, h, HASH_SPELL_DMG, spellDmg);
Ответы (1)
9
ttoni, Это конечно правильно, но все таки использовать StringHash() не рекомендуется из-за возможного столкновения строк. Как альтернатива можно использовать равкоды. Об этом методе узнал из этого поста
Чтобы оставить комментарий, пожалуйста, войдите на сайт.