返回信息流红色部分为出错的代码,因为我的Hash的value设定的是Arraylist,所以我认为ht(key).add就能够实现Arraylist.Add的功能,从而达到动态修改Arraylist的目的
部分代码如下:while (odr_curral.Read())//读取数据,如果odr_curral.Read()返回为false的话,就说明到记录集的尾部了
{
ArrayList pid = new ArrayList();
program.pid=(int) odr_curral.GetOracleNumber(0);
key.title = MyMd5_2(odr_curral.GetOracleString(1).ToString());
//从中文分词结果中得到节目内容
OracleCommand cmd2 = conn_combobox.CreateCommand();
cmd2.CommandText = "select result from PROGRAM_DIVIDE_RESULT where PID ='"+program.pid+"'";//在这儿写sql语句
OracleDataReader odr_curral2 = cmd.ExecuteReader();//创建一个OracleDateReader对象
while (odr_curral2.Read())
{ newcontent = odr_curral2.GetOracleString(0).ToString(); }//获得节目内容
if (ht.Contains(key.title))//判断哈希表是否包含特定键,其返回值为true或false
{ //获得旧有节目的内容
for (int i = 0; i <= ht(key.title).Count - 1; i++)
{
OracleCommand cmd1 = conn_combobox.CreateCommand();
cmd1.CommandText = "select result from program_divide_result where pid='" + ht(key.title)[i] + "'";
OracleDataReader curral = cmd1.ExecuteReader();
while (curral.Read()) { oldcontent = curral.GetOracleString(0).ToString(); }
int LD = LevenshteinDistance(newcontent, oldcontent);//求两节目内容的编辑距离
if ((LD / newcontent.Length) < 0.1)//编辑距离:字符串长度<0.1则认为是相似的
{
messageLable.Text = "有重复数据!";
sw.Write("信息" + program.pid + "和原有序号为" + ht[key] + "重复\r\n");
cmd.CommandText = "insert into PROGRAM_REPEAT_INDEX (PRI_ID,NEW_PID,OLD_PID)values ('" + program.pid + "','" + program.pid + "','" + ht[key] + "')";
cmd.ExecuteNonQuery();
}
else//题目相同但内容不同
{
ht(key.title).Add(program.pid);
}
}
}
else
{
pid.Add(program.pid);//把新节目的pid写入到键值中
ht.Add(key.title, pid); //添加key/value键值对
HTLENTH = HTLENTH + 1;//哈希表元素个数加1
MD5Queue.Enqueue(key.title);//添加md5.title到队列中
if (HTLENTH == 100000) HashRefresh();//当哈希元素到达100000时,哈希表更新,删除掉5%的哈希元素
}
}
这是一条镜像帖。来源:北邮人论坛 / dot-net / #1070同步于 2010/1/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
数据库,哈希表的问题
diyutianshi1
2010/1/4镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
value可以是任意类型吧
请用Dictionary,查查相关用法
如果value是引用类型,进行修改注意不要对其他数据造成破坏就行
比如value是一个list,然后把这个list赋给一个值,然后使用,
然后又对这个list修改,会对先前的list赋值造成影响...
【 在 diyutianshi1 (diyutianshi) 的大作中提到: 】
: hash表的value值可以是数组或者是arraylist么,我想可以随时对value值进行修改应该用什么数据结构做value值。
: 谢谢[em43]
【 在 diyutianshi1 的大作中提到: 】
: hash表的value值可以是数组或者是arraylist么,我想可以随时对value值进行修改应该用什么数据结构做value值。
: 谢谢[em43]
建议使用Dictionary(Of TKey, TValue),以及List(Of T)~
可是现在我的哈希键值对是:ht.Add(key.title, pid)其中pid是ArrayList,后来我想用
ht[key].Add(123)直接插入数值到pid中,程序报错说‘object不包含Add的定义’,这个问题该怎么解决
Dim ht As New HashTable()
Dim pid As New ArrayList()
ht.Add(key, pid)
[color=red]DirectCast(ht(key), ArrayList).Add(123)[/color]
这也是为什么建议使用Dictionary的原因:
Dim dict As New Dictionary(Of String, List(Of Integer))
Dim pid As New List(Of Integer)
dict.Add(key, pid)
dict(key).Add(123)
谢谢你的建议。不过我按照你的方法改了以后dict(key).Add(123) 程序报错说
dict”是“字段”,但此处被当做“方法”来使用
这可能是什么原因造成的?
谢谢先
【 在 diyutianshi1 的大作中提到: 】
: 谢谢你的建议。不过我按照你的方法改了以后dict(key).Add(123) 程序报错说
: dict”是“字段”,但此处被当做“方法”来使用
: 这可能是什么原因造成的?
: ...................
dict[key].Add(123)试试?
【 在 diyutianshi1 的大作中提到: 】
: 谢谢你的建议。不过我按照你的方法改了以后dict(key).Add(123) 程序报错说
: dict”是“字段”,但此处被当做“方法”来使用
: 这可能是什么原因造成的?
: ...................
C#和vb.net语法不同