采用归并排序算法查找两个字符串数组中的不同数据

简介:   现在项目中有需求比较两个字符串数组,找出其中不同的部分,并保存到本地txt。实现方式每个人都有自己的思路,这里提供一种通过归并排序实现的方式供大家参考。

  现在项目中有需求比较两个字符串数组,找出其中不同的部分,并保存到本地txt。实现方式每个人都有自己的思路,这里提供一种通过归并排序实现的方式供大家参考。

  基本思路是数组A和数组B对比,使用数组a来保存数组A中比数组B中多的元素(即在A中存在,B中不存在的元素),b来保存数据B中比数组A中多的元素(即B中存在,A中不存在的元素)。开始需要分别调用Sort()函数对A、B数组进行排序,然后使用CompareTo从两个数组中第一个数组进行比较,当A.0(A中第一个元素)>B.0时A.CompareTo(B)==1,当A.0=B.0时A.CompareTo(B)==0,当A.0<B.0时A.CompareTo(B)==-1。通过判断A.CompareTo(B)的值来执行a.add和b.add操作,最终就能得到a、b数组,然后写入到txt就可以了。

  核心代码如下:

 /// <summary>
    /// 归并排序: 查找两个集合中的不同数据
    /// </summary>
    /// <param name="root">源数据集合</param>
    /// <param name="source">新数据集合</param>
    /// <param name="remove">需在源数据中移除的集合</param>
    /// <param name="add">需在源数据中添加的集合</param>
    public void FindDistinct(List<string> root, List<string> source, out List<string> remove, out List<string> add)
    {
        remove = new List<string>();
        add = new List<string>();

        root.Sort();
        source.Sort();
        //foreach (string str in root) Console.WriteLine(str);
        //Console.WriteLine("\r\n");
        //foreach (string str in source) Console.WriteLine(str);
        //Console.WriteLine("\r\n");

        int i = 0, j = 0;
        while (i < root.Count && j < source.Count)
        {
            switch (root[i].CompareTo(source[j]))
            {
                case -1:
                    remove.Add(root[i]); i++;
                    break;
                case 0:
                    i++; j++;
                    break;
                case 1:
                    add.Add(source[j]); j++;
                    break;
            }
        }

        if (i < root.Count)
        {
            for (int m = i; m < root.Count; m++) remove.Add(root[m]);
        }
        else if (j < source.Count)
        {
            for (int m = j; m < source.Count; m++) add.Add(source[m]);
        }

        //Console.WriteLine("\r\nroot中不同的数据:");
        //foreach (string str in remove) Console.WriteLine(str);

        //Console.WriteLine("\r\nsource中不同的数据:");
        //foreach (string str in add) Console.WriteLine(str);
    }
  调用:

        List<string> remove;
        List<string> add;
        FindDistinct(rpqlist, pdflist, out remove, out add);
        //将strArray输出到文本文件
        using (TextWriter tw = new StreamWriter(@"D:\RPQ.txt"))
        {
            int index = 0;
            foreach (string str in remove)
            {
                string s = string.Format("{0:d3}\t{1}", index, str);
                tw.WriteLine(s);
                index++;
            }
        }
        using (TextWriter tw = new StreamWriter(@"D:\PDF.txt"))
        {
            int index = 0;
            foreach (string str in add)
            {
                string s = string.Format("{0:d3}\t{1}", index, str);
                tw.WriteLine(s);
                index++;
            }
        }
        MessageBox.Show("数据对比完毕,文件已经保存到D盘!");
  这里是对归并排序算法的一个小应用,希望对大家有所帮助,不足之处请大家批评指正。


相关文章
联邦学习的未来:深入剖析FedAvg算法与数据不均衡的解决之道
随着数据隐私和数据安全法规的不断加强,传统的集中式机器学习方法受到越来越多的限制。为了在分布式数据场景中高效训练模型,同时保护用户数据隐私,联邦学习(Federated Learning, FL)应运而生。它允许多个参与方在本地数据上训练模型,并通过共享模型参数而非原始数据,实现协同建模。
基于NURBS曲线的数据拟合算法matlab仿真
本程序基于NURBS曲线实现数据拟合,适用于计算机图形学、CAD/CAM等领域。通过控制顶点和权重,精确表示复杂形状,特别适合真实对象建模和数据点光滑拟合。程序在MATLAB2022A上运行,展示了T1至T7的测试结果,无水印输出。核心算法采用梯度下降等优化技术调整参数,最小化误差函数E,确保迭代收敛,提供高质量的拟合效果。
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
41 12
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
13 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
72 23
【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
【狂热算法篇】解锁数据潜能:探秘前沿 LIS 算法
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
81 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
"拥抱AI规模化浪潮:从数据到算法,解锁未来无限可能,你准备好迎接这场技术革命了吗?"
【10月更文挑战第14天】本文探讨了AI规模化的重要性和挑战,涵盖数据、算法、算力和应用场景等方面。通过使用Python和TensorFlow的示例代码,展示了如何训练并应用一个基本的AI模型进行图像分类,强调了AI规模化在各行业的广泛应用前景。
76 5