使用Dlang计算目录中的文件

时间:2013-02-04 15:16:31

标签: d

我想用一种简单的方法来计算使用D的目录中的文件数。

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

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

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

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

2 个答案:

答案 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");
}