如何计算文件系统中的文件

时间:2018-10-17 14:44:35

标签: f#

FileSystem = [Dir ("Dir3",[]); Dir ("Dir1",[Dir ("Dir2",[])])]

让我们假设这是我的文件系统。我想递归计算该FileSystem中的文件数。有人可以指导我吗?我找不到相关文档,也不知道在哪里寻找。

 type FileSystem = Element list and Element = | File of string | Dir of string * FileSystem

我的FileSystem结构如上。

1 个答案:

答案 0 :(得分:1)

这种类型的递归查询通常依赖于fold函数遍历层次结构。

折叠函数采用可用于汇总结果的函数。在下面的示例中,内部counter函数将到目前为止的累计计数以及列表中的下一个元素进行计算。然后,我们检查该元素,如果它是文件,则将其计数加1,否则,将其添加到子子目录中的文件计数。

let rec countFiles =
             let counter i el =
                 i + match el with
                     | File _ -> 1
                     | Dir (_, children) -> countFiles children
             List.fold counter 0

运行以下内容:

printfn "%A" <| countFiles
    [ File "a"
      Dir ("d1", [
                  File "b"
                  File "c"
                  ])
      ]

// yields 3