首页 新闻 会员 周边 捐助

求解:两个datatable,如何确定 其中一列值一一对应

0
悬赏园豆:5 [已解决问题] 解决于 2013-08-23 17:12

我得到了两个表,需要判断,表A中的 title列在遵循表B中的title列,需要一一对应

请给出个算法  TKS!

风醉的主页 风醉 | 小虾三级 | 园豆:1197
提问于:2013-08-23 16:42
< >
分享
最佳答案
0

第0步,两个表都按照title排序

第1步,比较数量,不一致直接False了

第2步,如果数量一致,循环比较,第一行和第一行比,第二行和第二行比.......,只要一个对不上,就False了

第3步,都比完了,返回Ture

public Boolean Compare(table1,table2)
{
   if(table1.count != table2.count)
   { 
      return false;
   }  
   for(i = 0; i < table1.count; i++)
   {
       if(table1.rows[i]["title"] != table2.rows[i]["title"])
       {
         return false;
        }
   }  
   return true;
}
收获园豆:5
会长 | 专家六级 |园豆:12463 | 2013-08-23 16:52

  这方法可行,就是需要先排序,增加了算法复杂度,分给你了,我刚刚自己写了个,贴出来大家学习下

 

DataTable  ws;  
string[] numbers ;
//赋值
//..
                    if (numbers.Length != ws.Count)
                    {
                        return "Error:附件个数和节点要求的个数不同!";
                    }
                    else
                    {
                        foreach (var item in ws)
                        {
                            if (!((IList)numbers).Contains(item))
                            {
                                return "Error:附件名称和节点要求的名称不同!";
                            }
                        }
                        return "true";
                    }
风醉 | 园豆:1197 (小虾三级) | 2013-08-23 17:05

@风醉飘: 这样写我也想到了,不过我想这样写的话,table1中没个title都要在table2中找一遍,就是那个

Contains方法,不知道其内部如何实现的,估计也是个循环,如果两个表数量大,就会慢,不如先排个序,一劳永逸了。而且排序不一定要在c#代码里排,从数据库查询的时候就排好。
会长 | 园豆:12463 (专家六级) | 2013-08-23 17:20

@会长: 这样挺对的,具体问题具体分析 TKS

风醉 | 园豆:1197 (小虾三级) | 2013-08-23 18:18
其他回答(2)
0

木有看懂,

alone__ | 园豆:60 (初学一级) | 2013-08-23 16:49
0

既然是linq, 你用A except一次B 再用B except 一下A, 看看怎么样

undefined | 园豆:898 (小虾三级) | 2013-08-23 17:17

没有说是 linq  其实就是两个数据集,要求A数据集中的某一列一定要和B数据集中的一列一一对应

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2013-08-23 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册