下面这种情况,用什么方法可以实现最快速的查找?有很多下面这样的结构的数据
Class S

   string a;
   string b;
   int  c;
   int d;
}想按 a,b的值,从一组S的对象中快速查找。
用什么方法最快呢?我想到把S的对象根据a 和 b的值作为键值存储到哈希表中,
然后查找。

解决方案 »

  1.   

    怎么查找都是一个线性过程,对S对象集合扫描一次就能找到a,b具有目标值的S对象.不知你说的最快是要求快在什么地方
      

  2.   


    Hashtable ht = new Hashtable();
    ht.Add(S.a + "__" + S.b, S);
      

  3.   

    我说下,不知道是否正确.呵呵.因为要根据a,b的值来查找某个对象,但是哈希表是一个键值对.又因为a,b都是字符串,所以可以考虑把a+b的值作为key.对象的引用作为value.当然也不一定一定要哈希表来存储,也可以用链表,线性表什么的.按照以上方法的话,就可以完成存储了.查找的时候在哈希表中查找就可以了.
      

  4.   


    如果根据a,b作为键值放到Hash表中,时间复杂度就是O(1),但是a,b怎样才能做为一个hash表的键值呢?
      

  5.   


    这种方法我也考虑过了,但是S.a + "__" + S.b作为键值,会不会有错误的可能呢?
      

  6.   

    标题错了:
    结构是这样的:
    Class S
    {
    string a;
    string b;
    int c;
    int d;
    bool e;
    }根据a,b,e的值查!
      

  7.   


    private void button1_Click(object sender, EventArgs e)
    {
        S[] ss = { new S("1", "1", 1, 1, true), new S("2", "2", 2, 2, true), new S("3", "3", 3, 3, true) };
        IEnumerable<S> se = from s in ss where s.a == "1" && s.b == "1" select s;
        MessageBox.Show(se.First().a);
    }public class S
    {
        public string a;
        public string b;
        public int c;
        public int d;
        public bool e;
        public S(string _a,string _b,int _c,int _d,bool _e)
        {
            a = _a;
            b = _b;
            c = _c;
            d = _d;
            e = _e;
        }
    }
      

  8.   

    的确如你所说,将a和b以任何方式连接都可能存在相同项,不过你可以令S类的实现IComparable,然后直接将S对象作为HashTable的key 
      

  9.   

    哈希表的KEY用 Object.GetHashCode 方法返回的int转换成String
      

  10.   

    如果a,b,e是唯一的,直接用Class S作为键值就可以,重载一下Equals
      

  11.   

    是否考虑可以存Sql?
    或者存成DataTable,需要那个就实例化一个?