我只是好奇这是否是在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<height;y++)循环的等效替代方案)。
我关注的是它逐行重新分配数组而不是一次性重新分配整个块,因此我不知道这是否会导致过多的内存移动。另外,我认为它不能保证是连续的(因为在这种情况下tiles只是指针的数组)。有没有更好的方法来做到这一点(不涉及使用单维数组并自己计算索引)?据我从文档中了解,一个连续的多维数组只能在编译时声明不可变的维度,只是想知道我是否遗漏了什么......