【发布时间】:2021-08-04 11:57:58
【问题描述】:
我有一个扑克牌类,其 GetHashCode 方法实现如下:
public override int GetHashCode()
{
return (int)rank * 4 + (int)suit;
}
我现在想设计一个适用于 2 张牌手/一对牌的 GetHashCode 方法。我认为这样的事情应该可行:
public override int GetHashCode()
{
return (card1.GetHashCode() * 53) + card2.GetHashCode();
}
但是,无论卡片的顺序如何,我都希望哈希码相同。例如如果 card1 = 黑桃 A,card2 = 黑桃 K,则哈希码应该等于 card1 = 黑桃 K,card2 = 黑桃 A。 我现在想也许我可以在应用我的功能之前订购卡片,但想知道是否有人可以提出一个很好的简单方法。谢谢
编辑:这行得通吗?
public override int GetHashCode()
{
if(card1.GetHashCode() > card2.GetHashCode())
{
return (card1.GetHashCode() * 53) + card2.GetHashCode();
}
return (card2.GetHashCode() * 53) + card1.GetHashCode();
}
【问题讨论】:
-
是的,这会起作用(编辑),但我会将哈希码放入变量中以避免多次计算
标签: c# gethashcode