在C#Dictionary中交换两个键/值对

时间:2013-10-03 12:02:51

标签: c# dictionary swap key-value

这是我想要做的。

有一个包含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

3 个答案:

答案 0 :(得分:6)

Dictionary<,>个实例不拥有“索引” - 您根本不应将它们视为有序。在迭代条目时您可能会注意到的任何顺序都应被视为实现细节。

如果您需要特定的订单,可以使用各种不同的类型,具体取决于您的要求。例如,要根据您使用的密钥SortedDictionary<,>SortedList<,>进行排序。对于任意排序,请考虑OrderedDictionary(遗憾的是非泛型)。

你真的需要一本字典吗?您可以使用List<KeyValuePair<string, int>>List<Card>,其中Card是自定义类型吗? (我猜测你的用例 - Card可以是代表你输入内容的任何类型。)

答案 1 :(得分:0)

制作镜像(第二个)字典,并将其用作关键源。在处理时合并在3d字典中。

答案 2 :(得分: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);