【问题标题】:How to compare element values between two Ordered Dictionaries如何比较两个有序字典之间的元素值
【发布时间】:2015-07-18 02:31:37
【问题描述】:

我正在尝试比较两个有序字典的元素中的值。我无法找到正确的编码来获取索引 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,我不知道该怎么做。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你能做到player1.Hand[0].Value 吗?

标签: c#


【解决方案1】:

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
}

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

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

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

【讨论】:

  • 谢谢!这很有帮助。尽管如此,我仍需要访问有序字典中元素的键和值,以便进行添加、删除和插入。我现在知道的唯一方法是使用 foreach 语句,例如foreach DictionaryEntry 卡在 Player1.Hand 中,但这对于我正在使用的代码来说非常尴尬。有没有更直接的方法来访问有序字典中单个元素的键和值?
  • 感谢您的帮助。
【解决方案2】:

我在另一个线程中发现了这个,它帮助我在有序字典中找到了键和值:

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

因此 card1.Key == key 和 card1.Value == 价值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多