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

时间:2010-12-13 21:41:50

标签: c# list dictionary compare loops

目前我有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进行比较,找出哪些文件已更改,以及旧列表没有的新列表文件。

  • 什么是迭代的最佳方式 在做两个列表时 校验和对文件的填充 patchList?

1 个答案:

答案 0 :(得分: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);

可能有帮助的相关Question