C# 如何比较列表中元素的枚举数?

C# 如何比较列表中元素的枚举数?,c#,enums,C#,Enums,我必须使用测试驱动开发实现一个扑克游戏。现在我必须检查给定的手是否包含直冲。因此,我必须检查每一张卡的枚举数是否大于前一张卡的枚举数。让我展示一些代码 public bool IsStraightFlush(IHand hand) { var sortedCards = hand.Cards.OrderBy(card => card.Face).ThenBy(card => card.Suit); } 每张卡都由两个枚举参数声明:公共卡(CardF

我必须使用测试驱动开发实现一个扑克游戏。现在我必须检查给定的手是否包含直冲。因此,我必须检查每一张卡的枚举数是否大于前一张卡的枚举数。让我展示一些代码

public bool IsStraightFlush(IHand hand)
    {
        var sortedCards = hand.Cards.OrderBy(card => card.Face).ThenBy(card => card.Suit);

    }
每张卡都由两个枚举参数声明:
公共卡(CardFace、CardSuit套装)
CardFace和CardSuits是枚举。 下面是我现在写的东西——我将给定的手分类为由五张卡片组成的参数。我先是当面点菜,然后是西服。现在我必须知道如何检查手牌的下一张牌的CardFace enum是否比当前的卡的CardFace enum+1。下面是CardFace的枚举

 public enum CardFace
{
    Two = 2,
    Three = 3,
    Four = 4,
    Five = 5,
    Six = 6,
    Seven = 7,
    Eight = 8,
    Nine = 9,
    Ten = 10,
    Jack = 11,
    Queen = 12,
    King = 13,
    Ace = 14
}

我希望这能奏效:

public bool IsStraightFlush(IHand hand)
    {
        var sortedCards = hand.Cards.OrderBy(card => card.Face).ThenBy(card => card.Suit).ToList();
        bool straightFlush = true;
        for (int i = 1; i < sortedCards.Count(); i++)
        {
            if ((int)sortedCards[i].Face != (int)sortedCards[i - 1].Face + 1)
            {
                straightFlush = false;
                break;
            }
        }
        return straightFlush;
    }
public bool IsStraightFlush(IHand)
{
var sortedCards=hand.Cards.OrderBy(card=>card.Face).ThenBy(card=>card.Suit.ToList();
bool-slightflush=true;
对于(int i=1;i
这可能会帮助您将序列强制转换为int,然后检查
下一个元素-1
是否等于当前元素:

    static bool CheckForSequence(List<int> input)
    {
        input.Sort();
        var result = true;
        for (int i = 0; i < input.Count - 1; i++)
        {
            result = input[i] == input[i + 1] - 1;
            if (!result)
                break;
        }
        return result;
    }

在这种情况下,如果按顺序收集,则所有元素的项目和索引之间的差异将相同。

尝试使用
分组方式,然后检查是否存在单个组,以及其中的所有车辆是否按顺序排列

public bool IsStraightFlush(IHand hand)
{
   var sortedCards = from c in hand.Cards
                     group c by c.Suit into d             
                     select new
                     {
                        Suit = d.Key,
                        Cards = d.OrderBy(x => x.Face)
                     };

    // all cards are the same suit              
    if(sortedCards.Count() == 1)
    {
        Card previousCard = null;
        foreach (var card in sortedCards.First().Cards)
        {
            if(previousCard != null && (card.Face - previousCard.Face > 1))
            {
                return false;
            }

            previousCard = card;
        }

        return true;
    }

   return false;
}

void Main()
{
    var hand = new Hand 
    {
        Cards = new List<Card>
        {
            new Card { Face = CardFace.Two, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Three, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Four, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Five, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Six, Suit = CardSuit.Clubs },
        }
    };

    Console.WriteLine(IsStraightFlush(hand));

}
public bool IsStraightFlush(IHand)
{
var sortedCards=从手中的c.卡
c组由c组分为d组
选择新的
{
西装=d.钥匙,
Cards=d.OrderBy(x=>x.Face)
};
//所有的牌都是一样的
if(sortedCards.Count()==1)
{
卡片上一张卡片=空;
foreach(sortedCards.First()卡中的var卡)
{
if(previousCard!=null&(card.Face-previousCard.Face>1))
{
返回false;
}
以前的卡片=卡片;
}
返回true;
}
返回false;
}
void Main()
{
var手=新手
{
卡片=新列表
{
新卡{Face=CardFace.Two,Suit=CardSuit.Clubs},
新卡{Face=CardFace.3,Suit=CardSuit.Clubs},
新卡{Face=CardFace.Four,Suit=CardSuit.Clubs},
新卡{Face=CardFace.5,Suit=CardSuit.Clubs},
新卡{Face=CardFace.Six,Suit=CardSuit.Clubs},
}
};
控制台。写入线(IsStraightFlush(手动));
}

如果我正确理解您的问题,您希望比较两个相同类型的Ienumarable列表。您可以使用Enumerable.SequenceEqual方法进行比较。不,我想比较列表中每张卡片的卡片面枚举。好的,完全通过我之前写的所有测试。非常感谢你。
public bool IsStraightFlush(IHand hand)
{
   var sortedCards = from c in hand.Cards
                     group c by c.Suit into d             
                     select new
                     {
                        Suit = d.Key,
                        Cards = d.OrderBy(x => x.Face)
                     };

    // all cards are the same suit              
    if(sortedCards.Count() == 1)
    {
        Card previousCard = null;
        foreach (var card in sortedCards.First().Cards)
        {
            if(previousCard != null && (card.Face - previousCard.Face > 1))
            {
                return false;
            }

            previousCard = card;
        }

        return true;
    }

   return false;
}

void Main()
{
    var hand = new Hand 
    {
        Cards = new List<Card>
        {
            new Card { Face = CardFace.Two, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Three, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Four, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Five, Suit = CardSuit.Clubs },
            new Card { Face = CardFace.Six, Suit = CardSuit.Clubs },
        }
    };

    Console.WriteLine(IsStraightFlush(hand));

}