使用LINQ,如果物品鍵不在列表中,是否有方法可以從字典中刪除所有項目?刪除鍵中不存在的詞典中的數據
像這樣的職位的答案,我做這樣的:
var keys = dict.Where(kvp => !list.Contains(kvp.Key)).ToList();
foreach(va key in keys){dict.Remove(k);}
我只是好奇,找到另一種方式來做到這一點...
使用LINQ,如果物品鍵不在列表中,是否有方法可以從字典中刪除所有項目?刪除鍵中不存在的詞典中的數據
像這樣的職位的答案,我做這樣的:
var keys = dict.Where(kvp => !list.Contains(kvp.Key)).ToList();
foreach(va key in keys){dict.Remove(k);}
我只是好奇,找到另一種方式來做到這一點...
關鍵是你無法循環字典;你必須首先拿到鑰匙的名單,否則foreach
循環會失敗:
var keys = dict.Where(kvp => !list.Contains(kvp.Key)).ToList();
foreach(var key in keys)
{
dict.Remove(key);
}
foreach(var key in dict.Keys.Except(list).ToList())
{
dict.Remove(key);
}
這將導致異常:'集合被修改;枚舉操作可能無法執行。' – Habib
或'myDictionary.Keys.Except(myList).ToList()。ForEach(k => myDictionary.Remove(k))' –
@Habib:在末端對「ToList」的調用立即評估linq查詢並將結果放入新列表中。由於QtX列舉了這個列表,而不是'dict.Keys'本身,'foreach'循環不會產生這個異常。 –
很顯然,我有沒有LINQ經典的方式嘗試... – Maxime
@Maxime'我只是好奇,想另謀出路這樣做......'你有其他答案.. –