none
HashSet<T>的问题,如何对自定义对象进行比较 RRS feed

  • 问题

  • 我有一个自定义对象(假如名称是abc,下面有三个字段 string e ,string f,string g)我想利用hashset对abc对象的集合进行消重只保留唯一项,但是比较方式是只比较字段e,也就是只要字段e相同,即便其他两个字段不相同,也需要消重掉,请问这样的话如何去写,我试着重写abc的gethashcode方法,但是不关用,希望大家指点
    2011年3月12日 11:43

答案

  • 一般这类特殊的比较需要通过操作符(=)重载实现。

    只比较字段e,如果相等就返回ture。

    不过hashset本身就是唯一无序的,不知道你如何消除重复?

    或者hashtable比较适合你,将对象的e字段作为key添加,添加前判断是否有重复的e即可。

     

     


    family as water
    2011年3月12日 12:39
  • 使用Hashtable

    class abc

    {

     public string e;

     public string f;

     public string g;

    };

    Hashtable ht = new Hashtable();

    abc foo = new abc();

    ...

    ht[foo.e] = foo;

    这样ht就是自然有序的,以e为key,abc为value。

    2011年3月12日 13:17

全部回复

  • 一般这类特殊的比较需要通过操作符(=)重载实现。

    只比较字段e,如果相等就返回ture。

    不过hashset本身就是唯一无序的,不知道你如何消除重复?

    或者hashtable比较适合你,将对象的e字段作为key添加,添加前判断是否有重复的e即可。

     

     


    family as water
    2011年3月12日 12:39
  • 使用Hashtable

    class abc

    {

     public string e;

     public string f;

     public string g;

    };

    Hashtable ht = new Hashtable();

    abc foo = new abc();

    ...

    ht[foo.e] = foo;

    这样ht就是自然有序的,以e为key,abc为value。

    2011年3月12日 13:17