c#-确定扑克牌同花顺

在纸牌应用程序中,我使用0-51代表5张纸牌.

西服是卡/ 13
排名是卡%
只有4种可能的套装(锹,心形,俱乐部钻石)

如果所有五个西服都相同,则同花顺.所有冲洗值均相等.黑桃与钻石相同.

我知道您会说预优化是邪恶的,但是我正在做一些这样的仿真,进行了百万次,这是最昂贵的步骤.该卡可以是字节,但使用int的计算似乎更快.我并没有真正检查范围,但是我把它放进去,所以您会知道有一个范围.

有没有更有效的方法?

public bool IsFlush(int[] quick)
{
    HashSet<int> suit = new HashSet<int>();
    suit.Add(quick[0] / 13);
    int thisQuick;
    for (int i = 1; i < quick.Length; i ++)
    {
        thisQuick = quick[i];
        if (thisQuick < 0 || thisQuick > 51)
            throw new IndexOutOfRangeException();
        if (suit.Add(thisQuick / 13))
            return false;
    }
    return true;
}

解决方法:

消除HashSet应该可以加快速度:

public static bool IsFlush(int[] hand)
{
    int firstSuit = hand[0] / 13;
    for (int i = 1; i < hand.Length; i++)
    {
        int card = hand[i];
        if (card < 0 || card > 51)
            throw new IndexOutOfRangeException();
        if (firstSuit != (card / 13))
            return false;
    }
    return true;
}

我的测试(微不足道)显示性能提高了约20%.

上一篇:php-如何减少代码重复


下一篇:python-优化字典的创建