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