[英]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.