• 算法: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/   

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



  • 相关阅读:
    战胜忧虑<2>——忙碌可以消除忧虑
    战胜忧虑<1>——不要让忧郁侵入你的生活
    Django的下载和安装
    Github 如何上传本地文件
    Python_相对路径的获取
    Python_生成HTMLTestRunner测试报告
    Python_requests实例
    Charles抓包(Http/Https请求)
    Python_base_函数返回值
    Python_base_print 取消自动换行
  • 原文地址:https://www.cnblogs.com/Excellent/p/1935768.html
Copyright © 2020-2023  润新知