2011-11-15 21 views
0

當我刪除字典密鑰添加然後添加新字典字典新值不會添加到上一個位置。而不是將其添加到刪除它的關鍵位置。如何刪除並添加應添加到最後位置的密鑰?

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

如果您關心訂購,您使用的是錯誤的類型,那麼Dictionary就不是這裏的答案。 –

+0

未訂購。它應該是任何順序,但我想添加在最後不在刪除鍵的位置。 – anishMarokey

+0

如果您對_location_感興趣,請關注_ordering_。 –

回答

2

如果您自行管理的排序,你可以使用一個List<KeyValuePair<int, string>>。在列表中,您可以使用Insert-方法將項目插入所需的位置。列表中的訂單仍然存在。

3

Dictionary s的不保證在插入的順序。 SortedDictionary s爲:

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" 
+0

我在.net 2.0中? – anishMarokey

+0

SortedDictionary是在.NET 2.0中:http://msdn.microsoft.com/en-us/library/f7fta44c%28v=VS.80%29.aspx – doctorless

+0

如果鍵不在排序順序然後呢? – anishMarokey

3

字典不一定保留排序。您要麼尋找SortedDictionary類,要麼在打印結果時對鍵值對進行排序。

+0

dic.Add(1,「a」); dic.Add(2,「b」); dic.Add(3,「c」); dic.Remove(2); dic.Add(0,「d」); – anishMarokey

+0

如果它不是按排序順序呢? – anishMarokey

+0

查看我的答案,枚舉順序未定義爲根據msdn文檔 – mydogisbox

2

here

對於枚舉的目的,在字典中的每個項目被處理作爲 表示值和其 鍵的KeyValuePair結構。項目返回的順序是未定義的。

如上所述由他人時,需要可以保留順序如SortedDictionary(由值保持順序)的數據結構或SortedList(保留插入順序)。 (見4.0版本herehereherehere 2.0版本)