比较2个带有内部列表的词典到Diff词典中? - c#

目前,我有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吗?

参考方案

遍历文件夹并调用传递两个路径的函数,并按三个单独的顺序产生差异(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可能会有所帮助

将对象转换为List <object> - c#

我看过类似的问题,但没有什么合适的。我有一个碰巧包含列表的对象。我想把它变成我可以列举的东西。例如:object listObject; // contains a List<Something> List<object> list; list = listObject as List<object>; // list c…

无法从ArrayList <String>转换为List <Comparable> - java

当我写下面的代码时,编译器说 无法从ArrayList<String>转换为List<Comparable>private List<Comparable> get(){ return new ArrayList<String>(); } 但是当我用通配符编写返回类型时,代码会编译。private List&l…

List <Dog>是List <Animal>的子类吗?为什么Java泛型不是隐式多态的? - java

我对Java泛型如何处理继承/多态感到困惑。假设以下层次结构-动物(父母)狗-猫(儿童)因此,假设我有一个方法doSomething(List<Animal> animals)。根据继承和多态性的所有规则,我假设List<Dog>是List<Animal>,而List<Cat>是List<Animal&g…

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

如何使用箭头符号(->)创建受保护的方法? - java

当我们编写以下代码时Stream.of(1,2,3,4,5).filter(i -> (i%2 == 0)).map( i -> i*i ); 表达式i -> (i%2 == 0)或i -> i*i将变为私有方法。在我的用例中,编写了一个junit测试,以确保没有方法是私有的(是的,这是强制性的),并且对于这些lambda表达式而言,…