Es curioso si esta es la mejor práctica para inicializar una matriz dinámica y multidimensional en D. Hay una sección sobre arreglos en su referencia de lenguaje, pero no estoy seguro de si se trata de lo que estoy tratando de lograr.Lenguaje D: ¿inicialización de mejores prácticas dinámicas de matriz multidimensional?
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
(o una alternativa equivalente como un típico para (y = 0; y < altura; y ++) circular).
Mi preocupación con esto es que reasigna cada fila de la matriz por separado en lugar de todo el fragmento a la vez, por lo que no sé si esto dará lugar a demasiada memoria. Además, creo que no está garantizado que sea contiguo (dado que , las teselas son solo una matriz de punteros en este caso). ¿Hay alguna forma "mejor" de hacer esto (que no implique el uso de una matriz unidimensional y el cálculo del índice por mi cuenta)? Por lo que puedo decir de los documentos, una matriz contigua multidimensional solo se puede declarar con dimensiones inmutables en tiempo de compilación, solo me pregunto si me falta algo ...
Bien técnicamente, la práctica _best_ usaría 'auto' en el lado izquierdo en lugar de repetir el tipo. Pero sí, esta es la mejor manera de asignar una matriz multidimensional siempre que se suponga que cada una de ellas tenga la misma longitud. –
Esto parece hacer el truco, ¡gracias! – ccjuju
Ver también [http://www.d-programming-language.org/expression.html#NewExpression](http://www.d-programming-language.org/expression.html#NewExpression). – XP1