2012-06-06 62 views
4

我試圖找出一個LINQ查詢,將過濾掉從字典鍵的列表,並返回一個新的過濾掉辭典使用LINQ過濾掉從字典某些鍵和返回一個新的字典

var allDictEnteries = new Dictionary<string, string> 
            { 
             {"Key1", "Value1"}, 
             {"Key2", "Value2"}, 
             {"Key3", "Value3"}, 
             {"Key4", "Value4"}, 
             {"Key5", "Value5"}, 
             {"Key6", "Value6"} 
            }; 
var keysToBeFiltered = new List<string> {"Key1", "Key3", "Key6"}; 

新字典應該只包含以下條目

"Key2", "Value2" 
"Key4", "Value4" 
"Key5", "Value5" 

我不想讓原來的字典的副本,並做Dictionary.Remove,我想有可能是和比有效的方式。

感謝您的幫助

+0

http://stackoverflow.com/questions/2131648/filtering-out-values- from-ac-sharp-generic-dictionary – univerio

+0

無論如何,你會製作一本新字典。創建原始字典的副本並使用'Dictionary.Remove()'。這是一個O(1)操作,整個事情是O(n),其中n是「keysToBeFiltered」的數量。我懷疑你會比這更好。 –

回答

10

您可以過濾原始字典,並在結果上使用ToDictionary

var keysToBeFiltered = new HashSet<string> {"Key1", "Key3", "Key6"}; 
var filter = allDictEnteries 
    .Where(p => !keysToBeFiltered.Contains(p.Key)) 
    .ToDictionary(p => p.Key, p => p.Value); 
+0

謝謝dasblinkenlight,那正是我想要的。 – RamGopal

+0

@RamGopal如果答案適用於您,請考慮通過單擊答案旁邊的複選標記輪廓來接受它,以表明您沒有在尋找替代答案,並在Stack Overflow上獲得全新的徽章。 – dasblinkenlight