C# 使用查找或字典表示C中的一手牌#
如果已经有类似的问题,我道歉。那里 有几个关于得分手的问题,但我不需要 我正在做的项目有10张卡片,需要报告结果 最佳5张手牌(“直牌”、“高牌”、“同花顺牌” 等等)。幸运的是,真正的牌是什么并不重要,我只是 我需要一个名字 我已经分析和整理了所有的卡片,并进行了测试 为了所有可能的人手。我现在只需要一个方便的 储存双手的方法。我的mad方法如下,使用伪代码 条款: 我希望有一个水平的动态列表,我可以按照从高到低的顺序填充卡片的数值。对于 例如,“Q J T 7 4 2 1”。T是10。值的副本将被删除 忽略。接下来,我希望这些值下面都有一个 甲板上存在的每种价值的套装列表。例如 J将有一个值为“dh”的子列表来表示我的 钻石杰克和红心杰克。 我相信这是处理这些卡片最优雅的方式, 因为大多数扑克手只处理价值观,而我没有 担心同一价值的牌排成一行,比如说直牌 测试。然后,这两个测试可以很容易地解决诉讼问题 通过参考键下的值进行测试 深呼吸,快到了 因此,一个查找实例似乎是完美的!它有确切的“一” 我想要的“多值键”结构。然而,事实并非如此 请允许我边走边加衣服。我必须把它们全部加起来 因为列表在输入后是不可变的 所以我也C# 使用查找或字典表示C中的一手牌#,c#,dictionary,lookup,C#,Dictionary,Lookup,如果已经有类似的问题,我道歉。那里 有几个关于得分手的问题,但我不需要 我正在做的项目有10张卡片,需要报告结果 最佳5张手牌(“直牌”、“高牌”、“同花顺牌” 等等)。幸运的是,真正的牌是什么并不重要,我只是 我需要一个名字 我已经分析和整理了所有的卡片,并进行了测试 为了所有可能的人手。我现在只需要一个方便的 储存双手的方法。我的mad方法如下,使用伪代码 条款: 我希望有一个水平的动态列表,我可以按照从高到低的顺序填充卡片的数值。对于 例如,“Q J T 7 4 2 1”。T是10。值的副
方法1 滚动并使用与每个值关联的套装填充另一个数组。基本上(在这次的实际伪代码中>\u>):
方法2 我还考虑过简单地处理不可避免地出现的重复项。例如,下面是我的笔直测试:
for (int i = 0; i < 5; i++)
{
int counter = 0;
for (int j = i; j < i + 4; j++)
{
int secondCard = getValue(cardsArray[j + 1]);
int firstCard = getValue(cardsArray[j]);
if (secondCard == firstCard)
{
break;
}
if (secondCard == (firstCard + 1))
{
counter++;
if (counter == 4)
{
isStraight = true;
return "straight";
}
}
}
}
for(int i=0;i<5;i++)
{
int计数器=0;
对于(int j=i;j
此代码不起作用。它需要在某个地方或其他地方进行一些调整才能完全工作,但我想在尝试修复它之前分析一下它是否值得。不过,它确实能准确地测试直线。还有几个注意事项:firstCard和secondCard是为了可读性和调试目的而存在的,isStraight是为了以后在测试直接刷新时不会重新发明轮子
这个嵌套循环将遍历所有卡片,直到第五张卡片为止(因为你不能直接从十张排序的卡片中选出少于5张卡片),然后按照你的预期检查接下来的五张卡片。如果在这个迭代过程中,我遇到了一个重复条目,这意味着它是另一套衣服的同一张牌,我只是“打破”。这一语句的结果是,现在我们将第二次迭代增加了一次,以检查下一张卡,而不是当前卡。我们拥有的订单卡的数量将保持不变,以便列表
static void StackOverflowExample()
{
var cardList = new List<KeyValuePair<string,int>> ()
{
new KeyValuePair<string, int>("Club", 8),
new KeyValuePair<string, int>("Spade", 9),
new KeyValuePair<string, int>("Heart", 10)
};
var results = cardList.Where(p => p.Key == "Heart");
}
Ace of Hearts = 0
Two of Hearts = 1
Three of Hearts = 2
...
Queen of Hearts = 11
King of Hearts = 12
Ace of Diamonds = 13
...
...
Ace of Clubs = 26
...
...
Kind of Spades = 51
int[] cardsArray = new int[10];
// here, fill the cards array from the input
int[] sortedBySuit =
cardsArray
.OrderBy(x => x/13) // sorts by suit
.ThenByDescending(x => x % 13) // then by value, descending
.ToArray();
int[] sortedByValue =
cardsArray
.OrderByDescending(x => x % 13)
.ToArray();