如何删除并添加应在最后位置添加的密钥?

时间:2011-11-15 15:35:30

标签: c# .net

当我删除词典键添加然后将新键添加到词典时,新值不会添加到上一个位置。而不是添加它被移除的键。

 Dictionary<int, string> dic = new Dictionary<int, string>();
 dic.Add(1, "a");
 dic.Add(2, "b");
 dic.Add(3, "c");

 dic.Remove(2);

 dic.Add(4, "d");

我希望输出为

1 "a"
3 "c"
4 "d"

不是

1 "a"
4 "d"
3 "c"

5 个答案:

答案 0 :(得分:4)

Dictionary不保证按插入顺序排列。 SortedDictionary是:

SortedDictionary<int, string> dic = new Dictionary<int, string>();
dic.Add(1, "a");
dic.Add(2, "b");
dic.Add(3, "c");

dic.Remove(2);

dic.Add(4, "d");

产地:

1 "a"
3 "c"
4 "d"

答案 1 :(得分:3)

字典不一定保留排序。您要么寻找SortedDictionary类,要么在打印结果时对键值对进行排序。

答案 2 :(得分:2)

来自here

  

出于枚举的目的,字典中的每个项都被视为   表示值及其值的KeyValuePair结构   键。返回项目的顺序未定义。

正如其他人所说,您需要一个保留订单的数据结构,例如SortedDictionary(按值保留订单)或SortedList(保留插入订单)。 (请参阅4.0版herehere以及2.0版herehere

答案 3 :(得分:2)

如果您自己管理排序,则可以使用List<KeyValuePair<int, string>>。在列表中,您使用Insert - 方法将项目插入所需的位置。列表中的顺序仍然存在。

答案 4 :(得分:0)

Dictionary未分类。 (随机访问地图)

您可以使用 SortedDictionary 按键排序。

或者,如果您想按值(而不是键)排序,请检查:

How do you sort a dictionary by value?