你要是经常有这样的操作
我建议你不要用Hashtable,改用DataTable
虽然有点古怪
但是DataTable是支持查询的比如:
DataTable dt = new DataTable();
dt.Columns.Add("key");
dt.Columns.Add("value");就用这样的DataTable 来代替你的Hashtable

解决方案 »

  1.   

    算了,其实也差不多,不过是循环让它做
    就是dt.Select出来一个DataRow[],还得自己foreach删除,嘿嘿
      

  2.   

    Dim ht As New Hashtable
                    Dim key As String
                    For Each key In ht.Keys
                            If key.StartsWith("abc") Then
                                    ht.Remove(key)
                            End If
                    Next
      

  3.   

    :brightheroes(闭关|那一剑的风情) ,saucer(思归) 谢谢,我关心的是效率问题
    就是要尽量避免遍历
    如果改成SortedList,我的普通的Get一个数据会不会变慢?慢多少?
      

  4.   

    什么都是需要循环的尤其是 string 类型的key 会更慢
      

  5.   

    自己建立一个结构表,
    不过在存储时,要key的按顺来保存。
    既然结构表已经按序顺放好了,你只要找到第一条匹配KEY的记录和最后一条匹配KEY的记录索引就可以了。
    这样你就不用遍历所有记录。
      

  6.   


    不要总想着不用循环,电脑是用来干嘛的?就是因为电脑的速度快,我们平时做的工作就有一部分是重复的,这正好让电脑做了。所以说,在这里你如果不想用循环,遍历,递归,你希望.net框架来实现你的这个功能,那么我们一定要认为,微软也只能使用循环来处理。记住电脑的做用,只要我们没有白白的浪费了电脑的资源,循环也好递归也好,该用还得用。要不然还要电脑做什么呢?我们不就是让电脑来判断,循环,递归吗?
      

  7.   

    哈希表很高效,所以才使用哈希表(自己建立一个结构表,怎么也赶不上哈希表的查找速度)我的数据量很大(算1G,100*10万条),放在内存中,就是为了提高速度。
    而且访问很频繁
    如果还要遍历的话,那就完蛋了,还不如用SortedList好了。
      

  8.   

    For Each key In ht.Keys
         If key.StartsWith("abc") Then
            ht.Remove(key)
         End If
    Next
      

  9.   

    回复人:mobydick(敌伯威|我排著队拿著爱的号码牌) ( 五级(中级)) 信誉:100  2005-01-24 08:39:00  得分:0

    填充Hashtable之前判断
    -------------------
    请问这是判断什么?干什么用的?
      

  10.   

    我的一个哈希表里所有的key都是string.
    现在我要删除key 的字符串是以abc开头的所有项,有没有快速高效的方法
    -------------------------------------------------------------------
    填充之前判断key的字符串是不是以abc开头,是就不写到Hashtable中。
    如果这些字符串还要,可以使用两个Hashtable,一个存放所有的key和string,另一个存放key不以abc开头的string。
      

  11.   

    可是使用IDictionaryEnumerator迭代子遍历Hashtable,效率应该会高一些。因为在使用foreach时,会发生引用赋值,从而对效率有一些影响。
      

  12.   

    那种方法应该不是很好的,毕竟你不能预见将来又要删除哪些Key了!
      

  13.   

    做两级或者更多级数的hashtable,根据你搜索的特点来规划
      

  14.   

    回复人:mobydick(敌伯威|我排著队拿著爱的号码牌) ( 五级(中级)) 信誉:100
    填充之前判断key的字符串是不是以abc开头,是就不写到Hashtable中。
    如果这些字符串还要,可以使用两个Hashtable,一个存放所有的key和string,另一个存放key不以abc开头的string。
    ---
    谢谢"abc"我只是举个例子,至于到时是什么字符串,有多长,不可预知.
    这么说吧:
    我这是一个DAL缓存,想由方法名和参数情况为Key,缓存的对象为Value.由于数据可能很多,选用比较高效的数据结构Hashtable.
    比如Find(key1=1,key2=2)生成DataSet和
    Find(key1=1,key2=4579)生成DataSet被缓存记录.
    现在由于对数据库相关数据进行了修改操作
    出现几种情况:
    Find()的所有记录无效;
    Find(key1=1...)的记录无效;
    ^…………
    无效的数据从缓存删除
      

  15.   

    pray1997(pray1997)
    谢谢,值得考虑
      

  16.   

    还是用SordList吧,遍历的时候设置一个标志变量,初始值为false,找到第一个符合条件的key的时候就把这个标志赋值为true,然后直到下一个不符合条件的key出现(这之间出现的key都应该是符合条件的),就break,可以节约一些时间。
      

  17.   

    SortedList一个坏处是我获得一个记录的速度比较慢。远远不及哈希表