zoukankan      html  css  js  c++  java
  • 内存中DataTable去除重复行

    删除内存中DataTable表的重复行

    假设在内存中(不是数据库中)有两个表:

    表一:TableA

    Name

    Phone

    张三

    123456

    李四

    123457

    王五

    1234568

    表二:TableB

    Name

    Phone

    张三

    123456

    李四2

    123465

    王五2

    123466

    现在要求把这两个表按照手机号去重后合并。

    方法一:

    观察后发现,这两个表有重复项:TableA中的“张三”和TableB中的“张三”。

    我们可以用算法在程序中遍历两个表去重,对比之后再放入新的表中,返回新表,这个方法可行,不过数据量大的时候性能就会特别差,耗时很高。

    方法二:

    我们可以用.net提供的Linq查询做,很方便。参考:http://blog.csdn.net/q107770540/article/details/6252339

    方法三:

    我们可以用“筛选视图”做,比较方便。

    首先,建一个TableC,把字段“Phone”设为主键,把第一个表的架构和数据复制到新建的TableC中,然后把第二个表合并到TableC中,最后用DefaultView.ToTable方法去重,返回TableC即可。源码如下:

    /// <summary>

            /// 合并数据

            /// </summary>

            /// <param name="TableA">表一</param>

            /// <param name="TableB">表二</param>

            /// <returns></returns>

            public DataTable MergeData(DataTable TableA, DataTable TableB)

            {

                DataTable TableC = new DataTable();

                TableC = TableA.Copy();//复制架构和数据

                TableC.PrimaryKey = new DataColumn[1] { TableC.Columns["Phone"] };//设置主键

                TableC.Merge(TableB);//合并B表

                TableA.Dispose();

                TableB.Dispose();

                //要保留的字段

                string[] Colomns = new string[] { " Name ","Phone"};

                //已去重的表

                TableC = TableC.DefaultView.ToTable(true, Colomns);

                return TableC;

            }

  • 相关阅读:
    排序_简单选择排序
    排序_冒泡排序
    笔试_阿里_逆波兰表达式
    刷题_牛客_大整数排序
    刷题_牛客_字符串编码
    刷题_thinkinginjava_吸血鬼数字
    刷题_牛客_超级素数幂
    刷题_LeetCode_Two Sum
    刷题_LeetCode_Reverse Integer
    854. Floyd求最短路(模板)
  • 原文地址:https://www.cnblogs.com/huyueping/p/3517635.html
Copyright © 2011-2022 走看看