将文本文件读入行数组的正确方法是什么?我在罗塞塔石碑上发现了以下内容:
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 的评论更多的可见性:这篇文章详细描述了数组分配器是如何工作的,以及为什么运行时可以有效地处理追加