【问题标题】:What would be the most effective data structure for storing and comparing directories in C#?在 C# 中存储和比较目录的最有效数据结构是什么?
【发布时间】:2022-01-17 09:50:30
【问题描述】:

所以我现在正在尝试用 C# 开发一个应用程序(用于练习),一个简单的文件同步桌面程序,用户可以在其中选择要监视的文件夹,然后每当所述目录发生更改时,将其复制到另一个目录。

我还在上学,刚刚完成了我的数据结构课程,所以我对此还是有点陌生​​。但我目前认为最好的解决方案是一棵树,对吧?然后我可以使用广度优先搜索进行比较,如果一个节点不匹配,那么我会将节点从原始树复制到重复树。但是,这似乎效率低下,因为我每次都会搜索整棵树。

也可能考虑使用链表。我真的不知道该去哪里。到目前为止,我已经完成的是目录监控,因此每次更改时我都可以保存到日志文件中。所以这很好。但我觉得这是最艰难的部分。任何人都可以提供任何指导吗?

【问题讨论】:

  • “最有效”对您意味着什么?最快、最少内存、最简单的数据结构、最小的数据结构、最简单的代码、最可重构的代码等
  • 考虑到我对数据结构比较陌生,我可以合理地理解一些东西,高效是指最快的。
  • 合理理解的东西和最快的东西很可能是两种截然不同的东西。为什么速度很重要?因此,例如,如果选项 A 需要 3 毫秒,选项 B 需要 10 毫秒,你在乎吗?如果不是,“最快”是什么意思?
  • 我想速度并不那么重要。您会推荐什么作为起点?
  • 我将只使用两个List<FileInfo> 并比较位置、上次写入时间和文件大小来确定要复制的内容。与遍历内存中的列表相比,文件复制速度较慢。如果您能证明处理能力正在减慢您的速度,我只会担心速度。

标签: c# algorithm data-structures linked-list tree


【解决方案1】:

使用哈希表(例如,Dictionary<string,FileInfo>FileInfo 的属性之一是文件的绝对路径:使用它作为键。

哈希表查找成本低(而且速度快)。

【讨论】:

  • 为什么要使用这样的冗余结构?如果字典中的stringFileInfo 中的FullName 相同,则没有任何意义。
  • OP 能够进行快速查找似乎没什么价值。毕竟,如果他们有字符串,他们可以做new FileInfo(fileName)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2013-03-05
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2015-05-12
相关资源
最近更新 更多