我有一个字典Dictionary<string,List<string>>
我想使用Linq语句从List中删除任何项目。这是我的代码
Dictionary<string, List<string>> dic1 = new Dictionary<string, List<string>>();
dic1.Add("K1", new List<string>() { "ss", "ss1" });
dic1.Add("K2", new List<string>() { "ss2", "ss3" });
我想从任何键上的字典中删除项目's'。以下代码对我来说很好。
foreach (KeyValuePair<string,List<string>> kvp in dic1)
{
if (kvp.Value.Contains("ss"))
{
kvp.Value.Remove("ss");
}
}
有没有可能在这里使用Linq语句?感谢....
答案 0 :(得分:5)
List.Remove
不会失败(它返回bool
告诉它是否成功)所以没有理由事先检查。只需删除它。
此外,由于您不关心密钥,因此您可以只迭代值(在您的情况下为列表):
foreach (var list in dic1.Values)
{
list.Remove("ss");
}
由于LINQ用于查询数据并且您没有查询,因此没有理由在此使用LINQ。您只需要删除这些项目。
答案 1 :(得分:0)
foreach (KeyValuePair<string, List<string>> kvp in dic1.Where(kvp => kvp.Value.Contains("ss")))
{
kvp.Value.Remove("ss");
}
答案 2 :(得分:0)
在评论中有一个答案,我想推广为对该问题的有效答案。
在我的情况下,我定义了一个词典:
Dictionary<string, List<string>> selections = new Dictionary<string, List<string>>();
然后,我根据用户可编辑的多行文本框将数据添加到字典中。如果用户编辑该字段,我不想允许使用空行,因为我使用\ r \ n分割行时,以后会给我错误的条目计数。
selections.Add("States", txtStates.Text.Replace("\n", "").Split('\r').ToList());
selections.Add("Zones", txtZones.Text.Replace("\n", "").Split('\r').ToList());
selections.Add("ZipCodes", txtZipCodes.Text.Replace("\n", "").Split('\r').ToList());
通过使用这一行代码,我可以删除所有不包含数据的元素:
selections.Values.LastOrDefault(li => { li.Remove(""); return false; });
以便以后我可以从文本框中准确计数元素。
var Icnt = selections.Where(r => r.Key == "Items").SelectMany(r => r.Value).Count();
var Scnt = selections.Where(r => r.Key == "States").SelectMany(r => r.Value).Count();
var Zcnt = selections.Where(r => r.Key == "Zones").SelectMany(r => r.Value).Count();
var ZCcnt = selections.Where(r => r.Key == "ZipCodes").SelectMany(r => r.Value).Count();
总体而言,我发现删除语句是一个非常优雅的解决方案。
答案 3 :(得分:-1)
var newdic = new Dictionary<string, List<string>>();
dic1.ToList().ForEach
(
pair =>
{
newdic.Add(pair.Key, pair.Value.Where(x => x!="ss").ToList());
}
);