如何从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));