прочитать файл в массив строк в d

Как правильно прочитать текстовый файл в массив строк? Я нашел следующее на Rosetta Stone :

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;

, но этого достаточно шаблонного кода, и я должен задаться вопросом, не упускаю ли я из виду что-то в стандартной библиотеке, которая уже делает это для меня.


Редактировать:делая комментарий fwend более понятным:в этой статье подробно описывается, как работает распределитель массива и почему среда выполнения эффективно обрабатывает добавление

5
задан Martin DeMello 26 April 2012 в 18:38
поделиться