我有一个 Card
类型,带有一个名为 Value
的 int
属性,其中 Ace = 14、Five = 5 等。
如果我有一张卡片列表 (5),即。一只手。我想做的是计算 Value
等于另一张卡的卡数,即找到 4 个同类、3 个同类、一对、两对等。我对 C#/编程相当陌生,但我相信这是 LINQ/Lambda 表达式的情况?有人可以帮我吗?
class Card : IComparable<Card>
{
private string name;
private int value;
private string suit;
public int Value
{
get
{
return value;
}
}
<.....>
//Constructor accepts string ex. "AH" and builds value 14, suit "Hearts"
public int CompareTo(Card that)
{
if (this.value > that.value) return -1;
if (this.value == that.value) return 0;
return 1;
}
}
List<Card> HandBuilder = new List<Card>();
HandBuilder.Add(...); //5 Cards
HandBuilder.Count ?? //Help
最佳答案
使用GroupBy
非常简单。
var cards = HandBuilder.GroupBy(card => card.Value)
.OrderByDescending(group => group.Count());
要检查是否有四个同类,只需查看第一组是否有四个项目即可;检查是否有相同的三个,看看第一组是否有三个项目。要检查是否有两对,只需查看前两组是否各有两个项目即可。
关于C# 计算列表中的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525900/