Если представить, что я пишу игру с клеточной картой (что-то типа Цивилизации или Героев), какой способ хранения информации о клетках был бы предпочтительней с точки зрения быстродействия?
Клеток много (допустим, 100.000), и в каждой клетке хранится куча информации - какому игроку принадлежит клетка, тип ландшафта, ресурсы, занята ли юнитом, сведения о соседних клетках (если рядом морская клетка - то можно строить порт). Игрок захватывает замок, и теперь нужно пробежаться по большому количеству клеток вокруг замка и поменять в них принадлежность тому или иному игроку.
Это только модель, чтобы было легче понять, что именно я имею ввиду. С точки зрения такой модели, с чем быстрее происходит работа - с двумерным массивом объектов или с трехмерным массивом строк и чисел? Если пренебречь тем, что удобнее будет понять запись map[463][537].type='grass', чем map[463][537][31]='grass', то что будет лучшим выбором?
Не знаю, будет ли разница в зависимости от языка, поэтому не ориентирую вопрос на конкретный язык.
Прежде всего нужно разделять абстракции иначе буджет невозможно контролировать сложность. Прежде всего игровое поле. Оно должно быть представлено произвольным графом каждый из которых хранит ссылку на своих соседей (связан 4 или 8 клеток) . Кроме того граф имеет поле data которое ассоциированно с данными о ячейке. Уровнем выше идет игровой мир, то есть его карта. Карта поделена на области и контексты предметной области (города\моря\т.д.) и представляются сервисными классами которые работают непосредственно с графами. То есть вы напрямую с графами не работаете вы через сервесные классы ищите, менеяете значения и т.д. Это уже они внутри себя создают кеши по индексу или ключу или чаще всего и тому и другому.
При генерации игры в самом начале граф позволяет намного быстрее поделить поле на области и контексты или игровые объекты. Затем быстродействие достигается за счет массивов\словарей\списков. Ну а после того как мир построен оочень затратных операций уже практически и нет, так как все сводится к работе с областями представляющих большие участки игрового поля. Поэтому волноватся не стоит.