2013-10-03 30 views
0

這裏是我想要做的。在C字典中交換兩個鍵/值對#

有一個字典有54個鍵/值對象。我想要的鍵/值對索引i與在索引j鍵/值對被換...

int i=1; int j=3; 
Dictionary<String, int> theDeck = new Dictionary<String, int>(); 
theDeck.Add("zero", 0); 
theDeck.Add("one", 1); 
theDeck.Add("two", 2); 
theDeck.Add("three", 3); 
KeyValuePair<String, int> p1 = theDeck.ElementAt(i); 
KeyValuePair<String, int> p2 = theDeck.ElementAt(j); 
theDeck.ElementAt(i) = p2; //THIS LINE DOES NOT WORK. WHAT IS ITS ALTERNATIVE 
theDeck.ElementAt(j) = p1; //THIS LINE DOES NOT WORK. WHAT IS ITS ALTERNATIVE 
+1

我不明白你爲什麼會需要做這個在字典?在字典中排序不是必需的,因爲KEY是如何訪問項目的。訪問字典的任何內容都不會根據KeyValuePairs的順序發生變化。 –

+0

實際上我需要的是針對字符串的特定數字。 ,我也想交換這些對,爲了我想要的。 你能幫我嗎? –

回答

6

Dictionary<,>實例不「指標」 - 你不應該把他們就像所有的命令一樣。在迭代條目時您可能會注意到的任何順序應視爲實現細節。

如果您想訂購特定訂單,根據您的要求,您可以使用各種不同的類型。例如,要根據您使用的密鑰SortedDictionary<,>SortedList<,>進行排序。對於任意排序,請考慮OrderedDictionary(不幸的是非泛型)。

你一定需要字典嗎?你可以只使用List<KeyValuePair<string, int>>List<Card>其中Card是一種自定義類型? (我猜你的使用案例 - Card可能是任何代表您輸入內容的任何類型。)

+0

其與列表相同的錯誤> 檢查此鏈接 [鏈接](https://docs.google.com/file/d/0B9pUOYW1Jzt0ZkljTmxXcE9LeXM/edit?usp=sharing) –

+0

@Asadullah:是的,我沒並不是說你可以*交換'List ' - 你永遠不能分配給方法調用的結果。但是,我們寫正確的代碼並不符合您的要求是沒有意義的...(對於'List ',您只需使用索引器而不是使用'ElementAt'。) –

+0

現在我們正在某處:P 感謝兄弟 –

0

製作鏡像(2nd)字典,並將其用作關鍵源。處理時在3D字典中合併。

0

試試這個。這對我有效。

首先將字典轉換爲列表,然後找到要交換的對象的索引。將交換列表交換爲字典後。

var list = someDictionary.ToList(); int indexA = list.FindIndex(objA=> (condition)); int indexB = list.FindIndex(objB => (condition)); list.SwapListEntries(indexA, indexB); someDictionary=list.ToDictionary(obj => obj.Key, obj => obj.Value);

+0

太多了,無用的處理,當更好的選項已經可用 –

+0

請你列出更好的選擇只是爲了我的知識。謝謝 –

+0

除字典,我沒有其他選擇,我想執行交換請指導。 –