我正在实施一个手牌强度评估器,它是在处理一手牌和翻牌后评估剩余 47 张牌中所有可能的对子。
我已经实现了评估器,但我错过了所有可能的比较组合。我很想为 Hand 创建一个类,它由两张卡片组成,并将每个组合存储在一个集合 HashSet 中。我应该选择哪种数据结构?如果 HashSet 是最好的,那么我如何强制 Hand 的每个实例化都是唯一的?
我正在实施一个手牌强度评估器,它是在处理一手牌和翻牌后评估剩余 47 张牌中所有可能的对子。
我已经实现了评估器,但我错过了所有可能的比较组合。我很想为 Hand 创建一个类,它由两张卡片组成,并将每个组合存储在一个集合 HashSet 中。我应该选择哪种数据结构?如果 HashSet 是最好的,那么我如何强制 Hand 的每个实例化都是唯一的?
HashSet
似乎是合理的,尽管由于稍后订购可能很重要,您可能需要考虑使用TreeSet
. 如果你实现了equals
and compareTo
/Comparable
方法,Hand
将Set
强制唯一性。
我会给卡片编号或将它们放在列表中。
如果你使用列表,你可以做
Set<Card> inHand = ...
for(int i=0;i<list.size();i++) {
Card card1 = list.get(i);
if (inHand.contains(card1)) continue;
for(int j=i+1;j<list.size();j++) {
Card card2 = list.get(j);
if (inHand.contains(card2)) continue;
// process card1 and card2