C#Dictionary按索引获取项目

时间:2016-11-03 22:32:29

标签: c# dictionary

我试图制作一个从我的词典中返回一张名片的方法 随机

我的词典:卡片的第一个名称是字符串,第二个是该卡的值,即int。

public static Dictionary<string, int> _dict = new Dictionary<string, int>()
    {
        {"7", 7 },
        {"8", 8 },
        {"9", 9 },
        {"10", 10 },
        {"J", 1 },
        {"Q", 1 },
        {"K", 2 },
        {"A", 11 }
    };

方法: random是随机生成的int。

    public string getCard(int random)
    {
        return Karta._dict(random);
    }

所以问题是:

  

无法转换为&#39; int&#39;到&#39;字符串&#39;

有人帮我怎么做才能得到这个名字?

5 个答案:

答案 0 :(得分:24)

您可以为每个索引获取键或值:

{{1}}

答案 1 :(得分:24)

这将返回对应于随机生成的int值的键

public string getCard(int random)
{
    return Karta._dict.FirstOrDefault(x => x.Value == random).Key;
}

这将返回对应于随机生成的int索引的键

public string getCard(int random)
{
    return Karta._dict.ElementAt(random).Key;
}

旁注:字典的第一个元素是The Key,第二个是Value

答案 2 :(得分:2)

您的密钥是一个字符串,您的值是一个int。您的代码无法正常工作,因为它无法查找您传递的随机内容。 另外,请提供完整的代码

答案 3 :(得分:2)

您可以使用System.Linq

轻松按索引访问元素

这是样本

首先在您的课程文件中添加

using System.Linq;

然后

yourDictionaryData.ElementAt(i).Key
yourDictionaryData.ElementAt(i).Value

希望这会有所帮助。

答案 4 :(得分:0)

将问题排除在可能更适合需要的替代方案之外的确切问题之外,这是否有用?创建您自己的类或结构,然后对它们进行数组处理,而不用陷入Dictionary类型的KeyValuePair集合行为的操作中。

使用结构而不是类将允许对两个不同的卡进行相等比较,而无需实现自己的比较代码。

public struct Card
{
  public string Name;
  public int Value;

}

private int random()
{
  // Whatever
  return 1;
}

private static Card[] Cards = new Card[]
{
    new Card() { Name = "7", Value = 7 },
    new Card() { Name = "8", Value = 8 },
    new Card() { Name = "9", Value = 9 },
    new Card() { Name = "10", Value = 10 },
    new Card() { Name = "J", Value = 1 },
    new Card() { Name = "Q", Value = 1 },
    new Card() { Name = "K", Value = 1 },
    new Card() { Name = "A", Value = 1 }
};

private void CardDemo()
{
  int value, maxVal;
  string name;
  Card card, card2;
  List<Card> lowCards;

  value = Cards[random()].Value;
  name = Cards[random()].Name;
  card = Cards[random()];
  card2 = Cards[1];
  // card.Equals(card2) returns true
  lowCards = Cards.Where(x => x.Value == 1).ToList();
  maxVal = Cards.Max(x => x.Value);

}