交换 C# 字典中的两个键/值对

本文关键字:两个 值对 字典 交换 | 更新日期: 2023-09-27 18:33:56

这就是我想做的。

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

交换 C# 字典中的两个键/值对

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

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

你肯定需要字典吗?您能否只使用List<KeyValuePair<string, int>>List<Card>,其中Card是自定义类型?(我猜你的用例 - Card可以是代表你条目中所有内容的任何类型。

制作镜像(第 2 个)字典,并将其用作密钥源。在处理时合并在 3D 字典中。

试试这个。这对我有用。

首先将字典转换为列表,然后查找要交换的对象的索引。将转换列表交换回字典后。

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);