gpt4 book ai didi

c# - 将 2 个带有内部列表的字典与 Diff 字典进行比较?

转载 作者:行者123 更新时间:2023-12-03 05:11:38 29 4
gpt4 key购买 nike

目前我有 3 本词典:

private Dictionary<string, List<string>> oldList = new Dictionary<string, List<string>>();
private Dictionary<string, List<string>> newList = new Dictionary<string, List<string>>();
private Dictionary<string, List<string>> patchList = new Dictionary<string, List<string>>();

oldList和newList填充的是一个目录及其子目录和文件,其中根目录和子目录是键,文件是目录中所有文件的内部列表。

用于填充newList的代码:

    private void ProcessDirectory(string targetFolder)
{
List<string> newInnerList = new List<string>();
newList.Add(targetFolder, newInnerList);
newInnerList = newList[targetFolder];

foreach (string file in Directory.GetFiles(targetFolder))
newInnerList.Add(Path.GetFileName(file));

foreach (string dir in Directory.GetDirectories(targetFolder))
ProcessDirectory(dir);
}
  • 可以使用具有要保存的内部列表的字典这些数据或者有更好的方法这样做?

现在我想将 newList 与 oldList 进行比较,找出哪些文件发生了更改,以及新列表中有哪些文件是旧列表中没有的。

  • 最好的迭代方式是什么在执行操作时在两个列表之间文件的校验和以填充补丁列表?

最佳答案

迭代文件夹并调用传递两个路径的函数,并以三个单独的序列产生差异(A 中不在 B 中的文件、B 中不在 A 中的文件以及已更改的文件)。

如果您愿意,另一个解决方案:

var sourceFiles = Directory.GetFiles(source, "*", SearchOption.AllDirectories).Select(o => o.Replace(source, ""));
var targetFiles = Directory.GetFiles(target, "*", SearchOption.AllDirectories).Select(o => o.Replace(target, ""));

var sourceFilesNotInTarget = sourceFiles.Except(targetFiles);
var targetFilesNotInSource = targetFiles.Except(sourceFiles);

var changedFiles = sourceFiles.Join(targetFiles, a => CheckSum(a, source), b => CheckSum(b, target), (a, b) => a);

相关Question这可能会有所帮助

关于c# - 将 2 个带有内部列表的字典与 Diff 字典进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433754/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com