什么是将文本文件正确读入行数组的方法?我在 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的评论:这篇文章详细描述了数组分配器的工作原理以及运行时如何高效地处理添加操作。
.capacity
属性来确定在需要调整大小之前可用的空间量。 - ricochet1k