0

这就是我想要做的。

有一个字典有 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
4

3 回答 3

7

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

如果您想要特定的订单,您可以使用各种不同的类型,具体取决于您的要求。例如,根据您使用的键SortedDictionary<,>SortedList<,>. 对于任意排序,请考虑OrderedDictionary(不幸的是,这是非通用的)。

你真的需要一本字典吗?您可以只使用 aList<KeyValuePair<string, int>>或者也许 a List<Card>whereCard是自定义类型吗?(我猜测您的用例 -Card可以是代表您条目中所有内容的任何类型。)

于 2013-10-03T12:04:57.297 回答
0

Make mirroring (the 2nd) dictionary, and use it as a key source. Combine in 3d dictionary, while processing.

于 2013-10-03T12:08:23.620 回答
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);

于 2016-11-16T11:58:07.470 回答