我有一个程序,我使用算法来确定'指数'一个对象,以确定它是否是一个唯一的对象,或者它是否真的持有与另一个类似对象相同的数据。
问题在于,由于这个对象的创建方式,我不能依赖这些索引的顺序相同。
例如,索引为
的对象 [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>>
时。
我已经把我的大脑靠在墙上几个小时试图弄清楚如何做到这一点。有人可以指出我正确的方向吗?
答案 0 :(得分:0)
您需要创建一个继承的HashSet类。您需要覆盖以下方法:
public override int GetHashCode() { /* Implementation */ }
public override bool Equals(object obj) { /* Implementation */ }
属性将基于集合的成员。
然后,插入自定义类的HashSet将不会导致重复。
您将拥有如下结构:
HashSet<MyHashSet<int>>
GetHashCode应该是基于集合中各个值的计算。 等于应该检查集合成员的等于。
以下是有关该主题的更多信息: