簡體   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