繁体   English   中英

以最快的方式基于字典过滤列表

[英]Filtering a list based on a dictionary in a fastest way

我对基于字典的列表过滤操作的性能感到困惑,并且需要帮助来确定执行此操作的最快方法。

我有一个字符串列表(也尝试过Hashset和Dictionary),在这种情况下,我需要根据另一个数据结构Dictionary的值过滤掉这些字符串。 我需要不在词典中的所有值。 列表数在300000附近,字典数在200000。当我使用以下代码时,这要花费很多时间。 请提供您的意见,我将如何改进此操作。

Dictionary<string, string> dictLocalFile - this has around 200000 entries.

var finalFilesHashSet = 
    new HashSet<string>(
        FinalFilesList
       .Where(x => !dictLocalFile.Any(kvp => kvp.Key.Equals(Path.GetFileName(x)))));

您没有有效地使用字典。 您要检查字典是否不包含键。 更改您的代码以使用.ContainsKey方法。 另外,您可能应该提前从该循环中调用Path.GetFileName(x)并衡量其影响。

var finalFilesHashSet = new HashSet<string>(
    FinalFilesList.Where(x => !dictLocalFile.ContainsKey(Path.GetFileName(x))));

通过编写字典代码,基本上消除了字典的所有性能优势。字典为您提供:O(1)get操作。 相反,您将其转换为可枚举并通过字典内容进行迭代。 内置方法本质上是哈希表查找

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM