我想用一种简单的方法来计算使用D的目录中的文件数。
据我在D手册中可以看出,dirEntries返回一个范围,但是它没有length属性。因此,我必须使用计数器迭代结果,或者收集传统数组中的名称,我可以找到它的长度......有更好的方法吗?
auto txtFiles = dirEntries(".", "*.txt", SpanMode.shallow);
int i=0;
foreach (txtFile; txtFiles)
i++;
writeln(i, " files found..");
答案 0 :(得分:15)
范围通常没有length
属性,除非可以在O(1)
中计算。任何无法计算其长度优于O(n)
的范围都不具有length
属性,因为它效率太低。获取没有length
属性的范围长度的惯用方法是使用std.range.walkLength
。如果范围定义length
,则使用length
;否则,它只是遍历范围并计算出有多少元素。
您也可以使用std.algorithm.count
,但它用于计算与谓词匹配的元素数量,虽然它默认为每个元素返回true
的谓词,但效率低于{ {1}},因为walkLength
在迭代它们时不会对元素进行任何调用,如果已经定义了walkLength
,它将使用length
,而count
永远不会。{ / p>
答案 1 :(得分:6)
您可以使用count
from std.algorithm
。
import std.algorithm, std.stdio, std.file;
void main() {
writeln(count(dirEntries(".", "*.txt", SpanMode.shallow)), " files found");
}