首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计一个包含两个可交换对象之间关系的信息的类

如何设计一个包含两个可交换对象之间关系的信息的类
EN

Software Engineering用户
提问于 2020-06-04 19:23:15
回答 1查看 72关注 0票数 0

我想设计一个类来保存与对象的比较结果。

考虑到我有一个类Thing,并且Thing有很多属性。现在,我有了一个引擎,它可以将Thing实例(保存在集合中)进行相互比较。比较实际上是从Comparison基类派生的类型,并且可能相当复杂(例如,ColorComparison)。实际结果并不重要,只是比较的结果是匹配的。因此,如果比较两个Thing实例成功,则比较将存储在Match类中,以及有关应用比较的信息。因此,Match类可能具有以下属性

  • ThingA
  • ThingB
  • 比较

之后,为了快速查找,我需要将Match类实例存储在HashSet中。识别Match的是ThingA和ThingB的组合。在一个完美的世界中,Match类可以为ThingA = x和ThingB =y和ThingA =y和ThingB =x提供相同的哈希。

另有一些执行说明:

  • 一旦实例化了Match类,ThingA和ThingB都是不可变的。
  • Match内部的东西不能被操纵(例如,我不能在它们中存储关系信息)

我的问题是,如何设计Match类,使HashSet在搜索Things的x和y组合时,也能找到y和x组合。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-06-05 04:44:05

您只需为hash()equals()定义Match,使其独立于thingAthingB的顺序。

可以这样做(伪python):

代码语言:javascript
复制
class Match:
    def hash(self, other):
        return self.thingA.hash() + self.thingB.hash() + self.comparison.hash()

    def equals(self, other):
        if self.comparison != other.comparison:
            return False
        if self.thingA == other.thingA and self.thingB == other.thingB:
            return True
        return self.thingA == other.thingB  and self.thingB == other.thingA
票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/411067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档