Есть метод InitHashtable, но можно ли уничтожить таблицу?
Я не нашел функции DestroyHashtable или типа того, как быть если я создаю таблицу, работаю с ней и хочу избавиться от неё навсегда?
Создание временных таблиц обрекает карту на утечки?
Насколько я знаю, использование массивов внутри структур сильно урезает им максимальное возможное количество экземпляров, потому я собираюсь массивы заменить на хеш-таблицы.

Принятый ответ

FlushParentHashtable, и вообще ждём вас на луа =)
`
ОЖИДАНИЕ РЕКЛАМЫ...
5
32
5 лет назад
5
FlushParentHashtable, и вообще ждём вас на луа =)
Принятый ответ
0
27
5 лет назад
0
тебе одной таблицы может хватить на всю игру. Нету смысла ее удалять. хотя и в правду не нашел такой нативки
0
16
5 лет назад
Отредактирован Drulia_san
0
Bergi_Bear:
FlushParentHashtable
типа этот метод уничтожает полностью без утечек всю таблицу? Если так, то спасибо
Bergi_Bear:
и вообще ждём вас на луа =)
Ну если ты скажешь как перевести полторы сотни тысяч строк кода cJass на луа с сохранением комментариев, имен переменных и отступов, то буду рад перейти на луа
Steal nerves:
тебе одной таблицы может хватить на всю игру. Нету смысла ее удалять
Прочитай зачем я её создаю, она заменяет массивы внутри структур.
Одна таблица, один массив. Родительский ключ - this, дочерний ключ - индекс массива.
0
32
5 лет назад
0
Drulia_san, а лучше да как Steal nerves, сказал, не уничтожать ХТ и не плодить ХТ в принципе, есть операция FlushChildHashtable, она удаляет все значения по ключу, то не засоришь ничего, но думаю о ней ты точно знаешь раз у тебя там код на 100500 строк
0
16
5 лет назад
Отредактирован Drulia_san
0
Bergi_Bear:
Drulia_san, а лучше да как Steal nerves, сказал, не уничтожать ХТ и не плодить ХТ в принципе, есть операция FlushChildHashtable, она удаляет все значения по ключу, то не засоришь ничего, но думаю о ней ты точно знаешь раз у тебя там код на 100500 строк
Почему никто не читает что я пишу? Сколько раз мне написать что мне нужна отдельная таблица на каждый экземпляр структуры, и даже на каждый массив внутри структуры. Если FlushParentHashtable удаляет таблицу, то этого более чем достаточно.
Одной таблицей технически невозможно обойтись. Я же не виноват, что массив на 100 элементов сокращает макс. количество экземпляров структуры с 8 тысяч до 80. Да, хештаблица в данной ситуации это костыль, но зато помогает обойти ограничение
0
32
5 лет назад
0
Drulia_san, да читаем мы читаем, просто ты какую-то дикую и странную вещь придумал, честно скажу мб тебе прекрано подойдёт FlushParentHashtable, но за его последствия я не могу ручиться, ибо надо ли перед удалением "Родителя" удалить всех "Детей" - хз, насколько сильно это вызывает утечку - хз.
0
24
5 лет назад
0
Вот из-за обилия таких костылей автоматический переход на Lua и усложняется больше необходимого т.к. эти костыли вручную выкидывать и переделывать придется.
5
23
5 лет назад
5
значит ты неправильно делаеш... вот у меня 1 хештаблицу на все виды юнит статы предметы и разные хранение... все лишь 1 и не вижу проблем!
0
16
5 лет назад
0
Bergi_Bear:
Drulia_san, да читаем мы читаем, просто ты какую-то дикую и странную вещь придумал, честно скажу мб тебе прекрано подойдёт FlushParentHashtable, но за его последствия я не могу ручиться, ибо надо ли перед удалением "Родителя" удалить всех "Детей" - хз, насколько сильно это вызывает утечку - хз.
Удалить всех детей легко, там один parent key, это this.
prog:
Вот из-за обилия таких костылей автоматический переход на Lua и усложняется больше необходимого т.к. эти костыли вручную выкидывать и переделывать придется.
Такой костыль у меня только в одном месте, поудалять всё это будет проще простого, так как это я перепишу вручную потом когда перенесу всё остальное.
2
32
5 лет назад
2
Drulia_san, ну тогда попробуй чё, о результатах отпишись, не стало ли фаталить не с того ни с сего
0
16
5 лет назад
0
начит ты неправильно делаеш... вот у меня 1 хештаблицу на все виды юнит статы предметы и разные хранение... все лишь 1 и не вижу проблем!
Извини но ты явно недалекий, потому что не читаешь что я пишу и говоришь какой ты молодец. Мне тебе пирожок с полки достать? Как ты в одну хеш таблицу запихнешь целые массивы значений для каждого объекта индивидуально, учитывая что в объекте массивов будет несколько? А ты в курсе что таблица начинает лагать если её захламить одновременно кучей всего? У меня тоже есть одна общая таблица для игры и её НЕЛЬЗЯ засирать такими данными.
Bergi_Bear:
Drulia_san, ну тогда попробуй чё, о результатах отпишись, не стало ли фаталить не с того ни с сего
Окей
3
29
5 лет назад
Отредактирован nazarpunk
3
Ну если ты скажешь как перевести полторы сотни тысяч строк кода cJass на луа с сохранением комментариев, имен переменных и отступов, то буду рад перейти на луа
Достать war3map.j, сконвертировать в lua, ужаснуться кривости кода и переписать начисто.
Сколько раз мне написать что мне нужна отдельная таблица на каждый экземпляр структуры, и даже на каждый массив внутри структуры
Не забывайте о лимите в 256 таблиц на игру. А вообще такой подход очень пахнет велокостылями.
0
32
5 лет назад
0
Не забывайте о лимите в 256 таблиц на игру
это лимит одновременных живых хеш таблиц или таблиц вообще включая убитые? если 1, то бояться особо нечего и нас просто в детстве (в 2007 или когда там хештаблицы появились) , запугали, что больше 1 нельзя и так пошло, но уже никто и не вспомнит почему
4
23
5 лет назад
4
мда! ясно с автором!
у меня хеш не 2 ключ а 4 ключа из 2 ключа имеет гибридный ключ от 2 значение ключа вот тебе многомерный массив в хеш
а как делать вы уже читали
x, y + (offset_y * index)
по умолчагние я поставил 1к offset для каждого значение
4
29
5 лет назад
Отредактирован nazarpunk
4
это лимит одновременных живых хеш таблиц или таблиц вообще включая убитые?
После InitHashtable() дороги назад нет, так что 257ой вызов просто не пройдёт.
нас просто в детстве (в 2007 или когда там хештаблицы появились) , запугали, что больше 1 нельзя и так пошло, но уже никто и не вспомнит почему
Насколько я помню из-за того что таблица тяжёлая и с её огромным диапазоном значений делать несколько просто нет смысла. Есть даже наработка которая позволяет иметь одну таблицу на все случаи жизни.
0
27
5 лет назад
0
согласен с pro100master неплохой вариант. в своей наработке использовал похожий принцип с оффсетами ссылка <= жутко не хватало пространства для маневра, пришлось так делать.
2
28
5 лет назад
Отредактирован PT153
2
А ты в курсе что таблица начинает лагать если её захламить одновременно кучей всего? У меня тоже есть одна общая таблица для игры и её НЕЛЬЗЯ засирать такими данными.
Ты её просто не чистил, а чистить нужно.
Да и зачем 100500 хештаблиц? У меня карта с кастомным хп, ресурсами, способностями, баффами, 1 хештаблица и всё работает.
0
23
5 лет назад
0
PT153, автор хочет чтобы структура имел клон но данных заполняли рандомно, но выше ответ уже дали =)
5
16
5 лет назад
5
255 хт максимум, если ты не можешь впихнуть в БЕЗЛИМИТЫЙ массив, коей хт и является, данные, это чисто твои головные проблемы с неспособностью придумать алгоритм. Ну используй 10 хт для разных данных по одному ключу юнита, ну 255 даже, дроби хендлы, да десятки вариаций, помимо очевидного "у автора проблемы"
0
29
5 лет назад
Отредактирован Волчачка
0
Есть ещё вариант, который использует опр. диапазон который обозначают как offset, в данном случае для юнитов это 0x100000 или 1048576, где arrid = handleid - offset(0x100000), но в его точности я немного сомневаюсь. Но для обновлённых массивов более менее подойдёт.
Однако, ничего не мешает сделать спец. счётчик, + Custom Value(он же UnitUserData) и задействовать обычные массивы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.