将文本文件读入行数组的正确方法是什么?我在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;
}
Run Code Online (Sandbox Code Playgroud)
但它看起来像每行调整一个数组,这是非常低效的.我可以通过标准的双倍方法跟踪读入的行数并调整数组的大小
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;
Run Code Online (Sandbox Code Playgroud)
但这是足够的样板代码,我不得不想知道我是不是只是忽略标准库中已经为我做这件事的东西.
编辑:给予fwend的注释更多可见性:本文详细描述了数组分配器的工作原理,以及运行时有效处理追加的原因