¿Cuál es la forma correcta de leer un archivo de texto en una matriz de líneas? He encontrado lo siguiente en Rosetta Stone:lee un archivo en una matriz de líneas en d
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
pero parece que está haciendo cambiar el tamaño de una matriz por línea, lo cual es bastante ineficiente. Podría hacer un seguimiento del número de líneas de leer y cambiar el tamaño de la matriz mediante el método de duplicación estándar
int i = 0;
foreach (str; f.byLine) {
if (lines.length <= i + 1) {
lines.length = lines.length * 2 + 1;
}
lines[i] = str.idup;
i++;
}
lines.length = i;
pero eso es lo suficientemente código repetitivo que tengo que preguntarme si no estoy pasando por alto algo en la biblioteca estándar que ya hace esto por mí.
Editar: dando comentario más la visibilidad de fwend: this article describe en detalle cómo funciona el conjunto asignador, y por qué anexar se maneja de manera eficiente el tiempo de ejecución
lo leí, y no decía nada sobre la estrategia de redimensionamiento interno cuando se agrega a una matriz –
Sí, me estaba dando cuenta de eso, pero sé que así es como funciona. Para obtener más detalles, D en realidad asigna memoria en fragmentos de tamaño de potencia de dos, por lo que si la matriz crece más grande que, por ejemplo, 32 bytes, se reasignará a un segmento de 64 bytes. – ricochet1k
bien, gracias, eso es bueno saber –