c#字典按索引获取项

本文关键字:获取 索引 字典 | 更新日期: 2023-09-27 18:16:09

我正试图使一个方法,从我的字典返回卡片的名称随机.

My 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是一个随机生成的整数。

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

所以问题是:

不能从'int'转换为'string'

谁来帮我一下,我应该怎么做才能得到正确的名字?

c#字典按索引获取项

如果需要根据索引提取元素键,可以使用这个函数:

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

如果需要提取元素值等于随机生成的整数的Key,可以使用以下函数:

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

确保在你的类中添加了对System.Linq的引用。

using System.Linq;

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

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

int value = _dict.Values.ElementAt(5);//ElementAt value should be <= _dict.Count - 1
string key = _dict.Keys.ElementAt(5);//ElementAt value should be  < =_dict.Count - 1

您可以通过使用System.Linq

轻松地通过索引访问元素。

这是示例

首先在类文件

中添加using
using System.Linq;
然后

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

键是字符串,值是int型。您的代码将无法工作,因为它无法查找您传递的随机int。另外,请提供完整的代码

跳出问题本身,寻找更适合需求的替代方案有用吗?创建您自己的类或结构,然后创建一个要对其进行操作的数组,而不是被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);
}