Язык D: инициализация динамического многомерного массива лучшие практики?

Просто интересно, является ли это лучшей практикой для инициализации динамического, многомерного массива в 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

(или эквивалентная альтернатива, например, типичный цикл for (y=0;y

Меня беспокоит то, что при этом перераспределяется каждая строка массива отдельно, а не весь кусок сразу, поэтому я не знаю, не приведет ли это к слишком большой перетасовке памяти. Кроме того, я полагаю, что не гарантируется смежность (поскольку tiles в данном случае является просто массивом указателей). Есть ли какой-нибудь "лучший" способ сделать это (который не включает использование одномерного массива и самостоятельное вычисление индекса)? Насколько я могу судить из документации, непрерывный многомерный массив может быть объявлен с неизменяемыми размерами только во время компиляции, просто интересно, может я что-то упускаю...

8
задан ccjuju 14 December 2011 в 10:29
поделиться