Быстрая 2D интеграл координата к пользовательскому классу словаря коллекции в C # - PullRequest
0 голосов
/ 29 января 2019

Мне нужна быстрая коллекция, которая отображает 2D типизированную точку int с пользовательским классом в C #.

Коллекция должна иметь:

  • Быстрый поиск (координаты с пользовательским классом), добавление точки, если она не существует
  • Быстрое удаление диапазона ключевой точки (вне заданного прямоугольника).Это фактически исключает Dictionary<Point2D, ...>, так как профилирование обнаружило, что эта операция занимает 35% всего времени кадра в моей реализации примера: - (

РЕДАКТИРОВАТЬ: Подчеркнуть:Я хочу удалить все поля вне данного прямоугольника (убить неиспользуемый кеш)

Координаты могут принимать любые значения типа int (они используются для кэширования [почти] бесконечных изометрических плиток 2D-карты, которые находятся рядом с камерой в Unity).

Точки всегда будут организованы в прямоугольную структуру (я могу ослабить это требование всегда следовать прямоугольной, на самом деле я использую изометрическую проекцию).

Сама структура используется для кэшированияспецифичные для тайла данные (например, тайлы-переходы)

Ответы [ 2 ]

0 голосов
/ 30 января 2019

РЕДАКТИРОВАТЬ: Обновлено с итогом обсуждения

Вы можете использовать разреженную статическую матрицу для каждого «чанка» в кеше и курсор для представления текущего окна просмотра.Затем вы можете использовать модуль математики или Quad Tree для доступа к каждому чанку, в зависимости от конкретного варианта использования.

Старый ответ:

Если они расположены на одинаковом расстоянии, они зачем вам нужныхеш вообще?Вы можете просто использовать матрицу объектов с NULL, где это значение по умолчанию, если там ничего не кэшируется.

Поскольку вы используете объекты, массив на самом деле является просто ссылками под капотом, поэтому на пустую область массива не будут влиять нулевые значения.

Если вам действительно это нужночтобы быть бесконечным, вы вкладываете матрицы в Quad Tree и создаете какую-то систему "Chunk".

0 голосов
/ 30 января 2019

Я думаю, это то, что вам нужно: RTree

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...