如何制作HashSet <hashset <int>&gt;工作得当吗?

时间:2018-01-27 02:53:56

标签: c# set hashset uniqueidentifier indices

我有一个程序,我使用算法来确定&#39;指数&#39;一个对象,以确定它是否是一个唯一的对象,或者它是否真的持有与另一个类似对象相同的数据。

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

例如,索引为

的对象

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

为了解决这个问题,我一直把这些索引放到HashSet<int>中,希望在将来比较这些集时,这很简单,因为在set notation中,{ {1}}与{0, 1, 2}相同。

问题是,我不能去

{0, 2, 1}

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

为了解决这个问题,我一直试图将这些结构添加到自己的Object1.UniqueHashSet.equals(Object2.UniqueHashSet) 中,这样我最终可以返回HashSet中的元素数量。

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

我已经把我的大脑靠在墙上几个小时试图弄清楚如何做到这一点。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

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

public override int GetHashCode() { /* Implementation */ }
public override bool Equals(object obj) { /* Implementation */ }

属性将基于集合的成员。

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

您将拥有如下结构:

HashSet<MyHashSet<int>>

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

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

How should I override Equals and GetHashCode for HashSet?