首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让HashSet<HashSet<int>>正常工作?

如何让HashSet<HashSet<int>>正常工作?
EN

Stack Overflow用户
提问于 2018-01-27 10:53:56
回答 1查看 36关注 0票数 0

我有一个程序,我使用一个算法来确定一个对象的“索引”,以确定它是否是一个唯一的对象,或者它是否真的持有与另一个类似对象相同的数据。

问题是,由于这个对象的创建方式,我不能相信这些索引的顺序是相同的。

例如,具有索引的对象:

[0, 1, 2][0, 2, 1]的对象相同。

为了处理这个问题,我一直将这些索引放在一个HashSet<int>中,希望将来比较这些集合时,会很容易,因为在集合表示法中,{0, 1, 2}{0, 2, 1}是相同的。

问题是我不能就这么走了

代码语言:javascript
复制
Object1.UniqueHashSet.equals(Object2.UniqueHashSet) 

因为我有很多这样的对象要比较,我需要确定在这些对象的列表中我有多少个唯一的对象。

当我使用值{0, 1, 2}HashSet<int>添加到HashSet<HashSet<int>>中,然后将{0, 2, 1}HashSet<int>添加到HashSet<HashSet<int>>中时,它会在集合中创建两个新元素,而我实际上只需要一个元素。所以事实证明我有:{{0, 2, 1}, {0, 1, 2}},当我真正想要{{0, 2, 1}}的时候。

我已经绞尽脑汁了好几个小时,试图弄清楚怎么做。有人能给我指个方向吗?

EN

回答 1

Stack Overflow用户

发布于 2018-01-27 11:06:18

您将需要创建一个继承的HashSet类。您需要覆盖以下方法:

代码语言:javascript
复制
public override int GetHashCode() { /* Implementation */ }
public override bool Equals(object obj) { /* Implementation */ }

属性将基于集合的成员。

然后,插入到自定义类的HashSet中将不会导致重复。

你会有一个类似这样的结构:

代码语言:javascript
复制
HashSet<MyHashSet<int>>

GetHashCode应该是基于集合中的各个值的计算。Equals应该检查集合成员的equals。

以下是有关该主题的更多信息:

How should I override Equals and GetHashCode for HashSet?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48472122

复制
相关文章

相似问题

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