6

Dを使用してディレクトリ内のファイル数を簡単に数える方法が欲しいのですが。

Dマニュアルからわかる限り、dirEntriesは範囲を返しますが、これには長さのプロパティはありません。したがって、カウンターを使用して結果を反復処理するか、長さを見つけることができる従来の配列に名前をまとめる必要があります...より良い方法はありますか?

auto txtFiles = dirEntries(".", "*.txt", SpanMode.shallow);

int i=0;
foreach (txtFile; txtFiles)
    i++;

writeln(i, " files found..");
4

2 に答える 2

15

lengthで計算できない限り、範囲には通常、プロパティがありませんO(1)。非効率的すぎるためO(n)、プロパティを持たない範囲よりも長さを計算できない範囲。プロパティlengthのない範囲の長さを取得する慣用的な方法は、を使用することです。範囲が定義する場合に使用します; それ以外の場合は、範囲を繰り返し処理し、要素の数をカウントします。lengthstd.range.walkLengthlengthlength

を使用することもできますがstd.algorithm.count、これは述語に一致する要素の数をカウントすることを目的としています。デフォルトでは、すべての要素を返す述語になりますが、反復するときに要素に対して何も呼び出さないため、trueより効率的ではありません。それらを使用し、定義されている場合は代わりに使用しますが、使用することはありません。walkLengthwalkLengthlengthcount

于 2013-02-04T18:40:04.247 に答える
6

countからstd.algorithm使用できます。

import std.algorithm, std.stdio, std.file;

void main() {
    writeln(count(dirEntries(".", "*.txt", SpanMode.shallow)), " files found");
}
于 2013-02-04T16:20:45.443 に答える