当我删除词典键添加然后将新键添加到词典时,新值不会添加到上一个位置。而不是添加它被移除的键。
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"
答案 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版here和here以及2.0版here和here)
答案 3 :(得分:2)
如果您自己管理排序,则可以使用List<KeyValuePair<int, string>>
。在列表中,您使用Insert
- 方法将项目插入所需的位置。列表中的顺序仍然存在。
答案 4 :(得分:0)