2013-05-13 33 views
2

我有一个int属性类型Card称为Value其中王牌= 14,五= 5等C#计数出现在列表

如果我有卡的列表(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 

回答

5

这是相当微不足道的使用GroupBy

var cards = HandBuilder.GroupBy(card => card.Value) 
    .OrderByDescending(group => group.Count()); 

检查四种只看第一组是否有四个项目;检查三种类型,看看第一组是否有三个项目。要检查两对,看看前两组是否有两个项目。

+0

准备好关于直行和冲水的问题。 – Jodrell 2013-05-13 15:42:34

+0

Straight和冲洗很容易测试。 – user2163343 2013-05-13 15:46:21