テキストファイルを行の配列に読み込む適切な方法は何ですか?d行内の行の配列にファイルを読み込む
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
それはかなり非効率的である1列の行ごとにサイズを変更し、やっているように見えます:私はロゼッタストーンで次を発見しました。私は中に読み、標準倍増メソッドを介して
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が配列アロケータがどのように機能するかを詳細に説明し、添付のランタイム
私はこれを読んで、配列に追加するときに内部サイズ変更の戦略について何も言わなかった。 –
うん、それに気付いていたが、それはどういう仕組みか分かっている。詳細については、Dは実際には2のべき乗の塊でメモリを割り当てます。したがって、配列が32バイトよりも大きくなると、64バイトのチャンクに再割り当てされます。 – ricochet1k
大丈夫、ありがとう、それはよく分かります –