2013-05-13 65 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