Каков правильный способ чтения текстового файла в массив строк? Я нашел следующее на Rosetta Stone:чтение файла в массив строк по d
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
, но похоже, что он делает один массив размер в каждой строке, которая является довольно неэффективным. Я мог бы следить за количеством строк читать и изменять размер массива с помощью стандартного метода удвоения
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;
но этого достаточно шаблонного кода, что я должен задаться вопросом, если я не только с видом что-то в стандартной библиотеке, уже делает это для меня.
Edit: давая комментарий больше видимость fwend в: this article подробно описывает, как в массив распределителей работ, и почему Добавление данных обрабатывается эффективно исполняющей
Я прочитал это, и он ничего не сказал о внутренней стратегии изменения размера при добавлении к массиву –
Да, я просто заметил это, но я знаю, что так оно и работает. Для более подробной информации D фактически выделяет память в кусках размера «сила-два», поэтому, если массив растет больше, скажем, 32 байта, он перераспределяется на кусок 64 байта. – ricochet1k
хорошо, спасибо, это хорошо знать –