C# -<T> 如果键对相等,则比较两个列表对象



我有两个List<T>对象。它充满了我自己的类iFile的对象,其中包含一个文件路径和最后一个呼叫的最后一个编辑日期。
现在,我想比较这两个列表,但是我当前的代码运行太慢了!(〜70.000个条目4分钟(

这是我的代码:

private static List<iFile> compareLists(List<iFile> old)
{
    List<iFile> cf = new List<iFile>();
    foreach(iFile file in files)
    {
        bool notChanged = false;
        iFile oldFile = files.Where(f => f.fPath == file.fPath).FirstOrDefault();
        if(oldFile != null & oldFile.lastChange.Equals(file.lastChange))
        {
            notChanged = true;
        }
        if(!notChanged)
        {
            cf.Add(file);
        }
    }
    return cf;
}

您建议更改以获得更好的性能结果?

您可以通过fPath加入文件。这将在内部使用哈希设置来查找两个集合之间的匹配。与具有复杂性o(n(的简单Where搜索不同,哈希集中的搜索具有O(1(复杂性:

var modifiedFiles = from file in files
                    join oldFile in old on file.fPath equals oldFile.fPath
                    where oldFile.lastChange != file.lastChange
                    select file;
return modifiedFiles.ToList();

相关内容

  • 没有找到相关文章

最新更新