2013-10-03 27 views
0

这里是我想要做的。在C字典中交换两个键/值对#

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

我不明白你为什么会需要做这个在字典?在字典中排序不是必需的,因为KEY是如何访问项目的。访问字典的任何内容都不会根据KeyValuePairs的顺序发生变化。 –

+0

实际上我需要的是针对字符串的特定数字。 ,我也想交换这些对,为了我想要的。 你能帮我吗? –

回答

6

Dictionary<,>实例不“指标” - 你不应该把他们就像所有的命令一样。在迭代条目时您可能会注意到的任何顺序应视为实现细节。

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

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

+0

其与列表相同的错误> 检查此链接 [链接](https://docs.google.com/file/d/0B9pUOYW1Jzt0ZkljTmxXcE9LeXM/edit?usp=sharing) –

+0

@Asadullah:是的,我没并不是说你可以*交换'List ' - 你永远不能分配给方法调用的结果。但是,我们写正确的代码并不符合您的要求是没有意义的...(对于'List ',您只需使用索引器而不是使用'ElementAt'。) –

+0

现在我们正在某处:P 感谢兄弟 –

0

制作镜像(2nd)字典,并将其用作关键源。处理时在3D字典中合并。

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

+0

太多了,无用的处理,当更好的选项已经可用 –

+0

请你列出更好的选择只是为了我的知识。谢谢 –

+0

除字典,我没有其他选择,我想执行交换请指导。 –