你要是经常有这样的操作
我建议你不要用Hashtable,改用DataTable
虽然有点古怪
但是DataTable是支持查询的比如:
DataTable dt = new DataTable();
dt.Columns.Add("key");
dt.Columns.Add("value");就用这样的DataTable 来代替你的Hashtable
我建议你不要用Hashtable,改用DataTable
虽然有点古怪
但是DataTable是支持查询的比如:
DataTable dt = new DataTable();
dt.Columns.Add("key");
dt.Columns.Add("value");就用这样的DataTable 来代替你的Hashtable
就是dt.Select出来一个DataRow[],还得自己foreach删除,嘿嘿
Dim key As String
For Each key In ht.Keys
If key.StartsWith("abc") Then
ht.Remove(key)
End If
Next
就是要尽量避免遍历
如果改成SortedList,我的普通的Get一个数据会不会变慢?慢多少?
不过在存储时,要key的按顺来保存。
既然结构表已经按序顺放好了,你只要找到第一条匹配KEY的记录和最后一条匹配KEY的记录索引就可以了。
这样你就不用遍历所有记录。
不要总想着不用循环,电脑是用来干嘛的?就是因为电脑的速度快,我们平时做的工作就有一部分是重复的,这正好让电脑做了。所以说,在这里你如果不想用循环,遍历,递归,你希望.net框架来实现你的这个功能,那么我们一定要认为,微软也只能使用循环来处理。记住电脑的做用,只要我们没有白白的浪费了电脑的资源,循环也好递归也好,该用还得用。要不然还要电脑做什么呢?我们不就是让电脑来判断,循环,递归吗?
而且访问很频繁
如果还要遍历的话,那就完蛋了,还不如用SortedList好了。
If key.StartsWith("abc") Then
ht.Remove(key)
End If
Next
?
填充Hashtable之前判断
-------------------
请问这是判断什么?干什么用的?
现在我要删除key 的字符串是以abc开头的所有项,有没有快速高效的方法
-------------------------------------------------------------------
填充之前判断key的字符串是不是以abc开头,是就不写到Hashtable中。
如果这些字符串还要,可以使用两个Hashtable,一个存放所有的key和string,另一个存放key不以abc开头的string。
填充之前判断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...)的记录无效;
^…………
无效的数据从缓存删除
谢谢,值得考虑