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