什麼是閱讀文本文件轉換成線的陣列的正確方法數組?我發現下面的羅塞塔石碑:文件讀入行的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;
調整陣列不過這也夠樣板代碼,我想知道,如果我不只是俯瞰標準庫的東西,已經爲我做了這個。
編輯:給fwend的評論更多的知名度:this article詳細介紹瞭如何數組分配工作,爲什麼追加有效地運行時
我通讀了這篇文章,並且在追加到數組時沒有提到有關內部調整大小策略的任何內容 – 2012-04-25 05:54:36
是的,我只是注意到了這一點,但我知道它是如何工作的。更詳細地說,D實際上是以兩個冪的大小來分配內存,所以如果數組的增長大於32個字節,則它將重新分配爲64個字節的塊。 – ricochet1k 2012-04-25 05:56:01
好的,謝謝,很高興知道 – 2012-04-25 05:56:36