将2个词典与内部列表比较为差异词典?

Pri*_*rix 2 c# dictionary loops compare list

目前我有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>>();
Run Code Online (Sandbox Code Playgroud)

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);
    }
Run Code Online (Sandbox Code Playgroud)
  • 是否可以使用带有内部列表的Dictionary来保存此数据,还是有更好的方法来执行此操作?

现在我想将newList与oldList进行比较,找出哪些文件已更改,以及旧列表没有的新列表具有哪些文件.

  • 在对文件进行校验和以填充patchList时,在2个列表之间进行迭代的最佳方法是什么?

Jah*_*ine 6

迭代文件夹并调用一个函数传递两个路径,并在三个单独的序列中产生差异(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);
Run Code Online (Sandbox Code Playgroud)

相关问题,这可能会有所帮助