如何比较两个有序字典之间的元素值

本文关键字:之间 字典 元素 何比较 比较 两个 | 更新日期: 2023-09-27 18:03:14

我正在尝试比较两个有序字典的元素中的值。我无法找到正确的编码来获取索引0处的元素并将它们转换为DictionaryEntrys。我正在尝试使用以下代码:

DictionaryEntry card1 = (DictionaryEntry)(player1.Hand[0]); 
DictionaryEntry card2 = (DictionaryEntry)(player2.Hand[0]);

if ((int)card1.Value > (int)card2.Value)
{
    // do stuff
}

代码传递智能感知,但由于无效强制转换而爆炸。我也可以写

 var card1 = player1.Hand[0];

但是它不允许我检索card1.Value。据我所知,card1需要转换为DictionaryEntry,我不知道该怎么做。

任何帮助都将非常感激。谢谢。

如何比较两个有序字典之间的元素值

OrderedDictionary中的索引器实现如下:

public object this[int index]
{
    get { return ((DictionaryEntry)objectsArray[index]).Value; }
    set { ... }
}

返回值,而不是键/值对。这就是为什么不能将其强制转换为DictionaryEntry

这样做比较,将索引器的返回值直接转换为int:

if ((int)player1.Hand[0] > (int)player2.Hand[0])
{
    // do stuff
}

从您的评论中,听起来您也希望能够修改密钥。

当然,您必须使用键或索引来获取值,然后删除旧元素并添加/插入新元素:

 var value = (int)player1.Hand[0];
 player1.Hand.RemoveAt(0);
 player1.Hand.Add("someNewKey", value);
 var value = (int)player1.Hand["oldKey"];
 player1.Hand.Remove("oldKey");
 player1.Hand.Add("someNewKey", value);

我在另一个线程中发现了这一点,这有助于我在有序字典中获得键和值:

DictionaryEntry card1 = player1.Hand.Cast<DictionaryEntry>().ElementAt(0);

因此card1。Key == Key和card1。Value == Value