algorithm - 在 F# 中编写重复文件查找器的技巧

标签 algorithm f# hashmap

我是编程新手,F# 是我的第一门 .NET 语言,也是我的第一门函数式语言。作为初学者的项目,我想尝试实现自己的重复文件查找器,并且正在寻找与我的项目相关的 F# 工具的一些提示。如果我的问题不符合 StackOverflow 的标准,我提前道歉:我很乐意根据需要对其进行更改。

这是我想出的粗略想法:我将从所需文件夹中检索所有文件,将文件内容读入字节数组,然后使用哈希表存储字节数组并删除重复项。更有经验的程序员会告诉我这是否是一个好方法?我可以做哪些改进?此外,如前所述,需要查看哪些相关的 F# 工具? MSDN 上有大量的库和命名空间等,对于我这样的新手来说真是不知所措。

预先热烈感谢您的帮助!

最佳答案

我建议从控制台应用程序开始。

有几个相关的 .Net API:

GetFiles 返回一个易于使用的包含所有文件路径的数组,但在找到所有文件之前会阻塞,而 EnumerateFiles 可让您逐个枚举文件并向用户提供反馈。

为了在查找重复项时提高性能,文件长度可用于在比较数据之前查找潜在的重复项。在这里你可以使用 Length propertySystem.IO.FileInfo .

如果您创建文件名和文件长度的元组序列,您可以使用 Seq.groupBy对潜在匹配项进行分组。最后,对于 2 人或更多人的群组,您可以读取文件并比较字节以找到完全相同的副本。

关于algorithm - 在 F# 中编写重复文件查找器的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894696/

相关文章:

Java HashMap - 将新值附加到 vector 的优化方法,该 vector 是 HashMap<String, Vector<String>> 中的值

c# - 解析现有的 "complex"SQL 语句并转换为对自定义 API 调用的调用

python - 合并 python 集合字典

f# - 无法在 F# 中创建列表文字

java - Map.entrySet()如何遍历hashMap

java - 具有不同 hashCode 的两个键是否可以成为 Java 中 HashMap 中同一存储桶的一部分?

algorithm - 有哪些网页排名替代方案?

algorithm - 练习(大哦): How do find intersection of two functions where n = 100 for example

Func<double[], bool> 内部的 F# 类型推断

f# - 如何使用 Xunit 运行 FsCheck