テキストファイルを行の配列に読み込む適切な方法は何ですか? ロゼッタ ストーンで次の情報を見つけました。
string[] readLines(string filename) {
auto f = File(filename);
scope(exit) f.close();
string[] lines;
foreach (str; f.byLine) {
lines ~= str.idup;
}
return lines;
}
しかし、行ごとに 1 つの配列のサイズ変更を行っているように見えますが、これはかなり非効率的です。読み込まれた行数を追跡し、標準の 2 倍の方法で配列のサイズを変更することができました
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 のコメントの可視性を高める:この記事では、配列アロケーターがどのように機能するか、および追加がランタイムによって効率的に処理される理由について詳しく説明します