使用Dlang对目录中的文件进行计数

使用Dlang对目录中的文件进行计数,d,D,我想一个简单的方法来计数的数量在一个目录中使用D 从D手册中可以看出,dirEntries返回一个范围,但它没有长度属性。因此,我必须使用计数器遍历结果,或者收集传统数组中的名称,我可以找到。。。有更好的办法吗 auto txtFiles = dirEntries(".", "*.txt", SpanMode.shallow); int i=0; foreach (txtFile; txtFiles) i++; writeln(i, " files found.."); 你可以用

我想一个简单的方法来计数的数量在一个目录中使用D

从D手册中可以看出,dirEntries返回一个范围,但它没有长度属性。因此,我必须使用计数器遍历结果,或者收集传统数组中的名称,我可以找到。。。有更好的办法吗

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

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

writeln(i, " files found..");
你可以用


范围通常没有
length
属性,除非它可以在
O(1)
中计算。任何不能以优于
O(n)
的方式计算其长度的范围都不会有
length
属性,因为它效率太低。获取无
length
属性范围长度的惯用方法是使用。如果范围定义了
长度
,则使用
长度
;否则,它只是在该范围内迭代,并计算有多少个元素


您也可以使用,但它用于计算与谓词匹配的元素数,虽然它默认为每个元素返回
true
的谓词,但效率低于
walkLength
,因为
walkLength
在元素上迭代时不会调用任何内容,如果定义了,它将使用
length
,而
count
永远不会使用。

值得一提的是
walkdlength
将在可用时使用
.length
,因此没有理由担心效率的损失。
import std.algorithm, std.stdio, std.file;

void main() {
    writeln(count(dirEntries(".", "*.txt", SpanMode.shallow)), " files found");
}