这是我想要做的。
有一个包含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
答案 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);