如何从Dictionary中删除项目

我有

Dictionary<string, List> Dic = new Dictionary<string, List>(); 

如何从Dic中删除前1,2,3个元素。 我不知道如何使用“foreach”

 foreach (KeyValuePair<string, List> kvPair in Dic) { Console.WriteLine(kvPair.Key); foreach (string str in kvPair.Value) { } } 

你不能从字典中获取项目1,2,3,你只能在一个键的基础上删除。

字典MSDN

返回项的顺序未定义。

您可以使用Orderby根据键对字典进行排序。 但要从字典中删除项目,您将需要密钥。

见Dictionary.Remove

编辑:根据您编辑的问题与“foreach”

枚举时不能修改字典。 如果您尝试从foreach中的字典中删除项目,您将收到错误:

collections被修改; 枚举操作可能无法执行。

您可以将字典转换为数组,然后从字典中删除项目(如下所示,可能会改进或更改,只是为了一个想法):

  var dicArrray = Dic.ToArray(); foreach (KeyValuePair> kvPair in dicArrray) { if (kvPair.Key.Equals("1")) Dic.Remove(kvPair.Key); } 

但请记住,项目在数组中的顺序是不确定的。 你无法确定它

正如habib所说你无法根据索引从字典中删除项目,你只能根据键删除项目,使用Remove()方法

从这里阅读更多内容 – 根据值删除字典中的项目

首先,创建要删除的键集合:

 var toDelete = new List(); int count = 3; foreach(var pair in dictionary) { toDelete.Add(pair.Key); count -= 1; if( count==0 ) break; } // then when ready - delete foreach(string key in toDelete) dictionary.Remove(key); 

原因是在枚举时通过删除项来使字典枚举器无效。

还要考虑关键对出现的顺序没有在规范中明确设置,因此您可能不会依赖它 – 即使它现在有效,它可能会停止在下一版本的框架中工作。 因此,在创建要删除的元素列表之前,您还必须确定“前3个”的含义。

要删除字典中的项目,请使用Remove()方法。 例如:

 Dictionary> dictionary = new Dictionary>(); dictionary.Add("1", new List 

添加的订单字典元素未维护。 但是,如果要删除最高键,例如,请执行以下操作:

 dictionary.Remove(dictionary.Keys.OrderBy().First()); 

如果dic是一个“简单” Dictionary ,使用LINQ你可以从原始字典创建一个新字典并将其重新分配给dic ,如下所示:

 dic = dic.Skip(3).ToDictionary(kv => kv.Key, kv => kv.Value); 

正如评论中的旁观者Habib的回答所指出的那样,字典项的顺序是未定义的,因此您可能希望仅在SortedDictionary上应用此技术。

在这种情况下,您需要从LINQ结果创建一个新的SortedDictionary

 dic = new SortedDictionary>( dic.Skip(3).ToDictionary(kv => kv.Key, kv => kv.Value));