在纸牌应用程序中,我使用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%.