各位大哥:
我有一个表第一个第二个字段都是无符号整数类型,第三个字段是字符串,格式如下:
satartip        endip           area
1065713664      1065723903      USA
1078318080 1078319103 USA
1078319872 1078320639 USA
1078320896 1078456319 USA
1078460416 1078484991 Tai
1078489088 1078517759 USA
1078525952 1078575103 USA
1078583296 1078677503 USA
1078685440 1078722559 USA
1078739456 1078739967 USA
1078780928 1078781951 Japan
1078784000 1078785279 USA
1078787840 1078820863 USA
,恩,上述的整形值其实是ip地址,当用户给出一个具体的IP地址的时候,如果此ip是在某一个startip和endip之间的,那么程序能自动的取出相应的归属地,因为startip和endip共同决定了地区字段area的值,现在我想把上述的对应关系,做成hash表的形式,但是没有想出相应的办法来转换
,希望大家给点意见和建议…

解决方案 »

  1.   

    你就放到键值对的泛型集合就OK了啦。
    Dictionary<int, int> dty = new Dictionary<int, int>();
    dty.Add(1065713664, 1065723903);
    .....
      

  2.   

    我觉得放入hash中还不如放入datatable中好使些,起码便于查询;
    hash中可以这样写
    hs.add("1065713664",new HashTable("1065723903","USA"));
    遍历起来比较麻烦。
    放入DataTable中的话,只需要select方法就能确定出来area了
      

  3.   

                Dictionary<int[], string> dty = new Dictionary<int[], string>();
                dty.Add(new int[] { 1065713664, 1065723903 }, "USA");
      

  4.   

    直接用SQL语句就行了啊Select * from table where satartip <= ip and ip<=endip
      

  5.   

    大家没有明白我的意思,我之所以这么做,就是要提高查找的效率,我试过databale了,这样做早一万多条数据之中,查找一条需要0.125秒,这个值不能满足我的要求,我需要更高的效率,实在是没有办法才想到用hash表了
      

  6.   

    这样嵌套不行,大侠我是这个意思:
    比如现在给一个IP 1078320635,我直接使用ht[1078320635]就可以得到相应的area,需要做的就是怎么样把startip和endip做一个相应的运算,能实现这样的查询.
    因为我的startip和endip只是一个IP段范围,在他们之间还有很多IP……
    不晓得这样说 你明白没有
      

  7.   

    这样嵌套不行,大侠我是这个意思:
    比如现在给一个IP 1078320635,我直接使用ht[1078320635]就可以得到相应的area,需要做的就是怎么样把startip和endip做一个相应的运算,能实现这样的查询.
    因为我的startip和endip只是一个IP段范围,在他们之间还有很多IP……
    不晓得这样说 你明白没有