D语言:初始化动态多维数组最佳实践?

ccj*_*uju 8 d multidimensional-array

只是好奇这是否是在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
Run Code Online (Sandbox Code Playgroud)

(或类似的替代方案,如典型的(y = 0; y <height; y ++)循环).

我对此的担心是它分别重新分配数组的每一行而不是整个数据块,所以我不知道这是否会导致太多的内存改组.此外,我相信它不能保证是连续的(因为在这种情况下,tile只是一个指针数组).有没有"更好"的方法来做到这一点(不涉及使用一维数组并自己计算索引)?据我所知,从文档中可以看到一个连续的多维数组只能在编译时用不可变维度声明,只是想知道我是否遗漏了一些东西......

Jus*_*n W 17

您可以新建数组,至少在D2中:

Tile[][] tiles = new Tile[][](height, width);
Run Code Online (Sandbox Code Playgroud)

我相信这是最好的做法.

  • 从技术上讲,_best_练习会在左侧使用`auto`而不是重复类型.但是,这是分配多维数组的最佳方式,只要它们中的每一个都应该是相同的长度. (2认同)