• 算法:C#数组去除重复元素算法研究


    可以在网上找到的代码:

    string[] stringArray = { "aaa", "bbb", "aaa", "ccc", "bbb", "ddd", "ccc", "aaa", "bbb", "ddd" };
    //List用于存储从数组里取出来的不相同的元素
    List<string> listString =new List<string>();
    foreach (string eachString in stringArray)
    {
    if (!listString.Contains(eachString))
    listString.Add(eachString);
    }
    //最后从List里取出各个字符串进行操作
    foreach (string eachString in listString)
    {
    Console.Write(eachString);
    //打印每个字符串
    }

    原理应该比较容易理解吧,通过遍历原数组中的每一个元素,将元素添加到新的泛型listString中,如果listString已经包含了就不添加,当遍历完原数组,泛型中保存的就是去重后的结果了。

    在数据量小的时候用这个算法还OK,但如果数据量比较大时(我工作中需要将5万以上左右的数据去重)其效率就不是那么让人接受了,一次处理需要耗费近1分钟左右的时间(测试电脑用的Inter Pentium D 2.8GHz、1G内存)

    由于需求对结果的元素序列没有任何要求,我采取了下列算法来提高效率

     

    string[] stringArray = {...因为是从文件读取的,这里省略了...}
    List
    <string> listString =new List<string>();
    Array.Sort(stringArray );
    //排序数组
    int MaxLine = stringArray.Length;
    #region 单独计算第一个
    if (sourceData[0] != stringArray[1])
    {
    listString.Add(stringArray[
    0]);
    }
    #endregion
    for (int i =1; i < MaxLine; i++)
    {
    if (sourceData[i] != stringArray[i-1])
    {
    listString.Add(stringArray[i]);
    }
    }

    思路是:首先对数组进行排序,这样相同的数组就排列在了一起。然后遍历原数组,一次取出当前元素和上一个元素,如果2个元素相等就跳过,不相等就将其元素的保存到泛型listString中。(第一次运行的时候,前一个元素为空,所以把第一个元素单独拿出来处理)


    文章来自:   http://excellent.cnblogs.com/   

    本文版权归作者和博客园共同所有,欢迎大家转载,如有转载请注明



  • 相关阅读:
    利用python 传输文件
    SVN 操作报错 “Previous operation has not finished; run 'cleanup' if it was interrupted“
    Java IP白名单相关工具类
    Truncated class file 问题的解决
    Linux 文件压缩与解压相关
    MyEclipse 根据左括号或右括号查找另外一半
    100个常用的linux命令(转)
    Java 编码规范(转)
    MyEclipse 远程调试Tomcat
    Extjs header column 自定义排序规则
  • 原文地址:https://www.cnblogs.com/Excellent/p/1935768.html
Copyright © 2020-2023  润新知