哈希表:ht
Datatable:dtht中存储key,value与dt中存储的a1,a2对应(是同类型数据)
现在的问题是需要在ht和dt之间进行对比,找到:
ht中有的而dt中没有的作为新增的数据项,可以用(HashTable)ht_add来保存
ht中key与a1,value与a2不完全一致的用 ht_update保存
dt中有的而ht中没有的用 ht_del来保存不知道大家明白了没有?
Datatable:dtht中存储key,value与dt中存储的a1,a2对应(是同类型数据)
现在的问题是需要在ht和dt之间进行对比,找到:
ht中有的而dt中没有的作为新增的数据项,可以用(HashTable)ht_add来保存
ht中key与a1,value与a2不完全一致的用 ht_update保存
dt中有的而ht中没有的用 ht_del来保存不知道大家明白了没有?
解决方案 »
- 不知那位做过在框架页左边的菜单栏类似于IE收藏夹式菜单样式(点击弹出,再点击隐藏)[.net技术开发]
- 如何对Profile中用户的信息进行搜索和统计?
- C# 北京时间转换为美国太平洋时间
- 关于在Tablet的单元格里面同时添加html代码和控件?
- 发布网站出错,指定输出的目录里面没有文件
- MD5加密的问题
- 关于水晶报表的问题。。。。应该不难解决。。。可我还是搞不定啊。。。。help!~
- 在没有安装.net开发环境的机器上发布asp.net程序怎样配置,希望能详细点的说明,谢谢。在线等待。急急急
- 如何获取日期时间字段中的日期部分
- SQL Server 不存在或访问被拒绝
- img 图片 展示问题
- [100分求]一个象QQ那样全面的国家城市联动菜单,感激
ht中key与a1,value与a2不完全一致的用 ht_update保存
==================================================
这句把我给弄糊涂了.首先,你看这个这两种类型有没有find之类的方法,如果有,基本可以用这种自己带的方法实现.
如果没有,就看下面:
就是个双重循环,一个个比对一下.for(int i=0;i<ht.Count;i++)
{
int FindIndex=-1;
for(int j=0;j<ds.Rows.Count;j++)
{
if(ht[i].key.ToString()==ds.Rows[0][j].ToString())
{
if(ht[i].value.ToString()==ds.Rows[1][j].ToString())
{
FindIndex= i;
break;
}
}
}
if(FindIndex>=0)
{
ht_update.Add(ht[FindIndex]);
}
}注意,以上是伪代码,只是告诉你思路.
更新的好说,我就是不知道如何得到不同的:
1、ht中有的而dt中没有的作为新增的数据项,可以用(HashTable)ht_add来保存
2、dt中有的而ht中没有的用 ht_del来保存
我不是不知道用循环,一句简单的循环就搞定了,没那么简单把。希望你们能真正的做一下我所说的例子!
Datatable:dt HashTable ht_Add = new HashTable();
HashTable ht_Update = new HashTable();
HashTable ht_delete = new HashTable();foreach(Dictionary dic in ht)
{
if(dt.Select("a1='"+dic.Key.ToString()+"'" + "AND a2='" + dic.Value.ToString()+"'").Length==0)
{
//增加项目
ht_Add.Add(dic.Key,dic.Value); }
else
if(dt.Select("a1='"+dic.Key.ToString()+"'").Length!=0 || dt.Select("a2='"+dic.Value.ToString()+"'").Length!=0 ))
{
//更新项目
ht_Update.Add(dic.Key,dic.Value); }
}for(int i=0;i<dt.Rows.Count;i++)
{
if(!ht.ContainsKey(dt.Rows[i][0].ToString()) && !ht.ContainsValue(dt.Rows[i][1].ToString ()))
{
//删除项目
ht_delete.Add(dt.Rows[i][0].ToString(),dt.Rows[i][1].ToString());
}
}
彻底晕了,这两句话压根就是一个意思.
你是不是又第三个数据源做为筛选的条件?如果只是ht和dt对比,取并集,那么你这两句话就是一个意思,也就是说最后ht_add和ht_del的内容是一样的.
我呆一会给你详细测试
我觉得应该用table.Select.好些,减少一些循环。
我呆一会给你详细测试
ht dt
1 1
2 2
3
此时ht中有而dt中没有的集合就是空,没有需要新增的。
如果是:
ht dt
1 1
2 2
3
此时dt中有而ht中没有的集合也是空,没有需要删除的。
问题已经解决了,一会儿就结贴
DataTable table = new DataTable();
DataColumn d = new DataColumn("A",System.Type.GetType("System.Int32"));
DataColumn d1 = new DataColumn("AA", System.Type.GetType("System.Int32"));
table.Columns.Add(d);
table.Columns.Add(d1); DataRow r1= table.NewRow(); //same
r1[0]=100;
r1[1]=200;
table.Rows.Add(r1);
DataRow r2= table.NewRow(); //del
r2[0]=1000;
r2[1]=2000;
table.Rows.Add(r2);
DataRow r3= table.NewRow(); //update
r3[0]=110;
r3[1]=210;
table.Rows.Add(r3);
DataRow r4= table.NewRow(); // del
r4[0]=2100;
r4[1]=2200;
table.Rows.Add(r4);
//
Hashtable Htable = new Hashtable();
Htable.Add("100", "200"); // same
Htable.Add("1200", "133"); // new
Htable.Add("110", "3433"); //update
Htable.Add("1300", "13433"); // new
Hashtable ht_Add = new Hashtable();
Hashtable ht_Update = new Hashtable();
Hashtable ht_del = new Hashtable();
foreach (DictionaryEntry dic in Htable)
{
if (table.Select("A='" + dic.Key.ToString() +"'").Length==0 && table.Select("AA='" + dic.Value.ToString()+"'").Length == 0)
{
ht_Add.Add(dic.Key, dic.Value);
}
else if ((table.Select("A='" + dic.Key + "'").Length != 0 && table.Select("AA='" + dic.Value + "'").Length == 0) || (table.Select("A='" + dic.Key + "'").Length == 0 && table.Select("AA='" + dic.Value + "'").Length != 0))
{
ht_Update.Add(dic.Key, dic.Value);
}
}
for (int i = 0; i < table.Rows.Count; i++)
{
if (!Htable.ContainsKey(table.Rows[i][0].ToString()) && !Htable.ContainsValue(table.Rows[i][1].ToString()))
{
ht_del.Add(table.Rows[i][0].ToString(), table.Rows[i][1].ToString());
}
}