使用Dlang计算目录中的文件

Iai*_*n S 6 d

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

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

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

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

writeln(i, " files found..");
Run Code Online (Sandbox Code Playgroud)

Jon*_*vis 15

范围通常没有length财产,除非可以计算O(1).任何无法计算其长度的范围都不会O(n)具有length属性,因为它效率太低.获得没有length属性的范围长度的惯用方法是使用std.range.walkLength.length如果范围定义length,它使用; 否则,它只是迭代范围并计算有多少元素.

你也可以使用std.algorithm.count,但是它用于计算与谓词匹配的元素的数量,虽然它默认为true对每个元素返回的谓词,但效率低于walkLength,因为walkLength它在迭代时不会调用元素上的任何内容length如果它已被定义,它将使用它,而count从不会.


Chr*_*ain 6

您可以使用countstd.algorithm.

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

void main() {
    writeln(count(dirEntries(".", "*.txt", SpanMode.shallow)), " files found");
}
Run Code Online (Sandbox Code Playgroud)