ЦЕЛЬ
Я создаю генератор мира, который должен динамически добавлять «воксели» в какой-то список, когда камера приближается к краю того, что уже существует. Каждый воксел должен быть максимально доступным, поскольку к каждому кадру потребуется доступ к нескольким сотням вокселей из списка тысяч.
ПОДХОДЫ, КОТОРЫЕ Я РАССМОТРЕЛ
1) Моя первая мысль была о многомерном массиве вокселей, его индексами были координаты x и y вокселя:
Voxels[,] voxels = new Voxel[128,128];
Плюсы: это должно быть очень быстро, если предположить, что я знаю координаты своего вокселя: Voxel myVoxel = voxels[x, y];
Минусы: я либо должен ограничить размер мира, либо мне нужно полностью воссоздавать массив каждый раз, когда я хочу создать новый ландшафт ...
2) Чтобы исправить это, я решил, что могу просто сохранить значения x & y в строке и использовать их в качестве ключей в словаре. Dictionary<string, Voxel> voxels = new Dictionary<string, Voxel>();
Voxel myVoxel = voxels[x + "," + y];
Тогда добавление в список будет так же просто, как вызов .Add (); способ.
ВОПРОСЫ
1) Чем эффективность извлечения из массива отличается от словаря. В моей голове, массив будет быстрее многих, так как я предполагаю, что словари должны перебирать каждый ключ, чтобы проверить равенство (извините за мое невежество, если я ошибаюсь)
2) Если массив действительно равен , что гораздо быстрее извлекать, будет уничтожать и воссоздавать массив из сотен тысяч элементов несколько раз в секунду (в зависимости от размер куска) стоит ли?
Имейте в виду, что целевой платформой являются мобильные телефоны, и не каждый сгенерированный воксел будет храниться в памяти плеера, поэтому список никогда не станет опасно большим. Тестирование еще предстоит сделать, чтобы определить конкретные размеры, но концепция есть ...
Заранее спасибо