Просто любопытно, если это лучший способ инициализации динамического многомерного массива в D . В справочнике по языкам есть раздел о массивах, но я не совсем уверен, подходит ли он к тому, чего я пытаюсь достичь.
class Map {
Tile[][] tiles;
this(uint width, uint height) {
tiles.length = height;
foreach (ref tilerow; tiles)
tilerow.length = width;
}
}
Map map1 = new Map(5000, 3000); // values determined at runtime
(или эквивалентная альтернатива, подобная типичной для цикла (y = 0; y <высота; y ++)). </p>
Меня беспокоит это то, что он перераспределяет каждую строку массива отдельно, а не весь кусок сразу, поэтому я не знаю, приведет ли это к слишком большой перестановке памяти. Кроме того, я считаю, что он не гарантированно является смежным (так как tile - это просто массив указателей в этом случае). Есть ли «лучший» способ сделать это (который не включает использование одномерного массива и вычисление индекса самостоятельно)? Насколько я могу судить по документам, непрерывный многомерный массив может быть объявлен только с неизменяемыми измерениями во время компиляции, просто интересно, если я что-то упустил ...