簡體   English   中英

如何使用linq從C#中的字典中刪除值?

[英]How to delete a value from the dictionary in C# using linq?

我有像這樣的字典

Dictionary<String,List<String>> MyDict=new Dictionary<String,List<String>>();

並且其中包含

{ "One"   { "A", "B", "C" } }
{ "Two"   { "C", "D", "E" } }

現在我需要刪除“一個”中的“ C”

所以現在MyDict將成為

{ "One"   { "A", "B" } }
{ "Two"   { "C", "D", "E" } }

遍歷Keyvalue對並​​重建Dictionary將產生所需的輸出(現在我正在使用此迭代方法)

但是在LINQ中有什么方法可以做到這一點嗎?

這將為每個鍵創建一個新字典和一個新列表,在“一個”中省略“ C”:

var result = myDict.ToDictionary(
    kvp => kvp.Key, 
    kvp => kvp.Value.Where(x => kvp.Key != "One" || x != "C").ToList());

或者,這將為“一個”創建一個新字典和一個新列表,並保留其他列表:

var result = myDict.ToDictionary(
    kvp => kvp.Key,
    kvp => (kvp.Key != "One") ? kvp.Value
                              : kvp.Value.Where(x => x != "C").ToList());

不過,就地修改字典可能更容易,更快捷:

myDict["One"].Remove("C");

LINQ在這里是一個過大的殺傷力,它很簡單:

MyDict["One"].Remove("C");

LINQ(和整個功能范式)也經過特殊設計,可在不可修改的序列上運行,通常,刪除某些內容會創建新的序列,在這種情況下幾乎總是會產生巨大的開銷,因為它完全用另一種語言模仿了功能范式。

MyDict["One"].Remove("C");

為什么要使用linq。 使用LINQ的功能之一是處理對象的不變性,所以我認為這不是您真正想要的。 使用linq進行操作要復雜得多(例如將字典作為KeyValuePair的IEnumerable然后將其構造成新的Dictionary ....),除非您正在使用此dict構造某種管道處理,否則可能不應該這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM