В общем, мне бы хотелось узнать все плюсы и все минус хеш-таблицы в сравнении с обузом массивных переменных.
Пока из минусов могу сказать то, что получается больше строк кода практически в 1.5 раз, а в системах с 0.01 таймерами это лишняя нагрузочка и минус фпс.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
32
7 лет назад
1
Steal nerves:
У обычных массивов от переменной, то там индекс не такой большой (от -8192 до 8192). Нельзя туда ни хэндлы всунуть, ни равкоды. Равкод к счастью можно заменить на тип переменную как тип юнита. А в хэш-таблицу все влезает, и норм. Обычные массивы неудобны еще тем, что там нельзя аттачить, приходится делать более сложные конструкции с пробегом цикла и проверками, чтобы найти нужный индекс. А вот в хэше можно сразу лепить аттач (по хэндлу юнита).
Различны способы хранения - (удобно когда массивов больше - удобно сделать сложную конструкцию). В более простых конструкциях этого не нужно.
xgm.guru/p/100/183113 массивы хэша
xgm.guru/p/100/183650 пробовал реализовать с помощью неких констант, когда не хватало ячеек
А и ненужно в массивы засовывать хендлы, структуры vjass'a чуть чуть побыстрее, ну и малость удобнее в написании, писанины чуть меньше, если ты работаешь с тучей данных а не 3-5 переменных типа кастер, урон, расстояние...
Есть системы без хештаблицы, но они не такие уж универсальные, и нужны реально в редких случаях, но можно юзать для тех же спеллов, пример такой системы Xattach (гугл в помощь), там целлая группа массивов.
0
20
7 лет назад
0
массив удобнее ТОЛЬКО потому, что слегка быстрее
При использовании БД на массивах прозрачны действия движка(как реализован интерфейс работы с хт - одним близзам известно). Сразу ясно какой из вариантов реализации эффективнее
0
16
7 лет назад
0
Diaboliko:
массив удобнее ТОЛЬКО потому, что слегка быстрее
При использовании БД на массивах прозрачны действия движка(как реализован интерфейс работы с хт - одним близзам известно). Сразу ясно какой из вариантов реализации эффективнее
?? обычное дерево. что конкретно тебя смущает-то? неважно, что под капотом, если оно работает без ошибок
0
32
7 лет назад
0
DracoL1ch, Просто бытует мнение что у хт не пофикшена коллизия, но так доказательств этому нету....
0
30
7 лет назад
0
Да там StringHash( ) жрёт больше, чем все перезаписывания в массивах вместе взятые (кстати, на память не влияет значение переменной, влияет только факт её проинициализированности). Короче, юзайте структуры (и читайте русский мануал по ним), это удобнее хранения данных в хэше или массиве, и по факту является работой с массивами напрямую. И быстро, и удобно.
0
26
7 лет назад
Отредактирован Extremator
0
Clamp, что есть "проинициализированность переменной" ? х)
Clamp, чем отличаются структуры (которые есть только на момент их написания, но их попросту не существует в скрипте) от массивов (которые просто есть и точка)?
0
32
7 лет назад
0
Extremator:
Clamp, что есть "проинициализированность переменной" ? х)
Clamp, чем отличаются структуры (которые есть только на момент их написания, но их попросту не существует в скрипте) от массивов (которые просто есть и точка)?
Интерфейсом и системой слежения за тем занята или свободна та или иная ячейка + защита от переполнения массива, не хотите vjass пишите все сами...
0
26
7 лет назад
0
Не хотите всё сами - пишите на vJass / GUI.
действительно
0
30
7 лет назад
0
чем отличаются структуры от массивов?
Внимание, ответ:
структуры
есть только на момент их написания
массивы
просто есть и точка
что есть "проинициализированность переменной" ?
Что в памяти выделено место, где она хранится, и ничто иное это место занять не может. По-хорошему, в компиляторе должен быть сборщик мусора, который освобождает память, на которую не остаётся ни одной живой ссылки, но в варкрафте слишком много типов, которые являются ссылочными и, следовательно, всегда держат ссылку на память, не давая сборщику мусора её освобождать. Вот пока переменная висит неочищенным ссылочным типом, она является проинициализированной.

чем отличаются структуры от массивов?
Тем, что препроцессор vJass сам генерирует Jass код таким образом, что лишних масссивов попросту не создаётся (за инициализированность элементов массивов ссылочных типов, однако, всё равно отвечает автор vJass кода). Кстати, если мне не изменяет память, каждый созданный массив де-факто имеет 8190 элементов, если проинициализирован хотя бы один из них: в них не лежат ссылки, но место зарезервировано.
0
26
7 лет назад
0
Clamp:
Внимание, ответ
ты пишешь что это удобнее... вопрос - чем? подталкивая к ответу на вопрос тс
а в скобках я лишь обозначил их природу
ты же мне отвечаешь - "их природа бла-бла-бла...", что не является ответом
а вопрос тс в том что плюс, а что минус при абузе
Дальше
Ты говоришь что не имеет значения что записано в переменной
И теперь следом говоришь что она держит ссылку, который == корень зла
Добавляя что наличие чего-либо в переменной (ссылки) является ответом на то, "проинициализированна" ли она, или нет...
. . . что в переменной (ссылка) - не важно
. . . важно - проинициализированная ли она
. . . проинициалзация переменной == ссылке в переменной
WTF?
Clamp:
каждый созданный массив де-факто имеет 8190 элементов
а почему не 8191? или не 8192?
0
32
7 лет назад
0
Clamp, Extremator, что то вы совсем уехали от темы, надо не разбирать что как устроено а что лучше в тех или иных случаях и почему...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.